我正在研究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
}
所以现在我有两个制作对象的选择,它们是相互排斥的。
据我了解,如果我使用options2,编译器会在堆栈内存中创建一个临时对象并将引用值返回给 t2。
如果这是正确的,我该如何表达或解释option1?似乎在堆栈内存中创建了相同的对象,并且计算机为该对象提供了名称“t2”,但我不清楚此选项 1与选项 2有何不同,因为变量和引用的名称有些令人困惑。
此外,交替切换选项,我可以看到在每种情况下对象都是在不同的内存位置创建的。(例如option1的对象是在0x7fff5fbff828中创建的,或者option2是在0x7fff5fbff820中的)
你能解释一下吗
1.变量名(option1)和引用(option2)有什么区别。
2.选项 1 和 2 的工作方式有何不同。
3.为什么在这两种情况下都在不同的内存位置创建对象。
在此先感谢您的帮助!