我知道使用引用返回临时变量是行不通的,因为临时对象在函数终止后丢失了,但是下面这段代码是有效的,因为返回的临时变量被分配给了另一个对象。
我假设临时对象在函数调用行后被销毁。如果是这样,为什么这不适用于这种方法链接?
Counter& Counter::doubler()
{
Counter tmp;
tmp.i = this->i * 2;
return tmp;
}
int main()
{
Counter d(2);
Counter d1, d2;
d1 = d.doubler(); // normal function call
std::cout << "d1=" << d1.get() << std::endl; // Output : d1=4
d2 = d.doubler().doubler(); // Method chaining
std::cout << "d2=" << d2.get() << std::endl; // Output : d2=0
return 0;
}
最佳答案
如果函数返回对局部对象的引用,则该对象将在函数返回后立即销毁(与局部对象一样)。它不会持续到函数调用行的末尾。
在对象被销毁后访问对象将产生不可预知的结果。对于“工作”的某些定义,有时它可能有效,有时可能无效。只是不要这样做。
关于c++ - 使用行为不同的引用返回 tmp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15968226/