Ich lese durch Stroustrup's
4. Ausgabe: The C++ Programming Language
. Ich habe einen python/java
Hintergrund, also sind die ersten 4 Kapitel bis jetzt in Ordnung.C++: Was macht eigentlich eine De-Referenz?
In Chapter 3
ich sah:
complex& operator+=(complex z) { re+=z.re , im+=z.im; return ∗this; }
, die einen Tag lang Versuch begann, diese Frage zu schreiben:
Zuerst ich, dass es herausgefunden wird eine Referenz auf das Objekt und nicht eine Kopie zurück. Wie konnte ich in dieser question bestätigen.
Und ich war in der Lage, den Unterschied zwischen der Rückkehr einen Verweis in eine reference variable
gegen eine reguläre Variable von diesem question
zu verstehen, und ich habe meine eigene Studie
class Test {
public:
Test():x{5}{}
int x;
void setX(int a) {x = a;}
Test& operator+=(Test z) {x+=z.x; return *this;}
// the keyword this is a pointer
Test* getTest() {return this;}
// but I can return the reference by *this
Test& getTest1() {return *this;}
// or I can return a copy
Test getTest2() {return *this;}
};
Das hat mich führen zu fragen, warum es wird de-reference
genannt, so habe ich diesen Versuch
int x = 8;
int* p = &x;
int y = *p;
int& z = *p;
x++; // let's have some fun
std::cout << y << std::endl;
std::cout << z << std::endl;
Wieerwartetund z = 9
, also wie hat die de-reference
die address
in einem Fall zurückgegeben, und die value
in der anderen? Wichtiger noch, wie ist C++
diese Unterscheidung zu machen?
Eine Referenz kann als automatisch dereferenzierter Zeiger betrachtet werden, ist aber keine Adresse. – iksemyonov
@iksemyonov Wenn es keine Adresse oder ein Wert ist, was ist es dann? –
@SamHammamy Eine Adresse ist ein Wert. – melpomene