私はc++の参照を研究していますが、変数名と参照の違いにかなり混乱しています。テストコードは以下のとおりです。
class TestClass{
private:
int num;
public:
TestClass(int n):num(n){
cout<<this<<" : init of : " <<this->num<<endl;
}
TestClass(const TestClass& t):num(t.num){
cout<<this<<" : copyInit of : " <<this->num<<endl;
}
};
int main(int argc, const char * argv[]){
TestClass t = *(new TestClass(55)); //just to test copy initialization
const TestClass t2 = TestClass(100); //option1
const TestClass &t2 = TestClass(100); //option2
}
だから今、私はオブジェクトを作るのに2つのオプションがあります。それらは互いに排他的です。
私の理解では、options2を使用すると、コンパイラはスタックメモリに一時オブジェクトを作成し、参照値をt2に返します。
これが正しい場合、オプション1を言葉で表現または説明するにはどうすればよいですか?同じオブジェクトがスタックメモリに作成され、コンピュータがそのオブジェクトに「t2」という名前を付けているようですが、変数の名前と参照がやや紛らわしいため、このoption1とoption2の違いがはっきりとわかりません。
さらに、オプションを切り替える代わりに、オブジェクトがそれぞれ異なるメモリ位置に作成されていることがわかりました。(たとえば、option1のオブジェクトは0x7fff5fbff828で作成され、それまたはoption2は0x7fff5fbff820にありました)
説明してもらえますか
1.変数名(option1)と参照(option2)の違いは何ですか。
2.オプション1と2での動作の違い。
3.どちらの場合でも、オブジェクトが異なるメモリ位置に作成される理由。
よろしくお願いします!