私はStroustrup's
第4版を読んでいます:The C++ Programming Language
。私はpython/java
のバックグラウンドを持っているので、最初の4つの章はこれまでのところうまくいきます。私はそれがオブジェクトではなくコピーへの参照を返していることを考え出しC++:実際には逆参照は何ですか?
まず:この質問を書く一日中試みを始めました
complex& operator+=(complex z) { re+=z.re , im+=z.im; return ∗this; }
を:私が見たChapter 3
で
。これで確認できたのでquestion。
そして私は対このquestion
からの定期的な変数reference variable
への参照を返すの違いを理解することができましたそして、私はなぜ疑問に私を導く私自身の裁判
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;}
};
をしましたそれはde-reference
と呼ばれ、そう予想したように、私はこの裁判に
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;
をやっているy = 8
とz = 9
の場合、de-reference
はどのようにしてaddress
を返し、もう1つのケースにvalue
を返しましたか?もっと重要なことは、C++
はどのように区別されていますか?
リファレンスは自動的に逆参照されたポインタと考えることができますが、それはまったくアドレスではありません。 – iksemyonov
@iksemyonovアドレスまたは値でない場合は、それは何ですか? –
@SamHammamyアドレスは値です。 – melpomene