我知道使用引用返回临时变量不起作用,因为临时对象在函数终止后丢失,但以下代码有效,因为返回的临时对象被分配给另一个对象。
我假设临时对象在函数调用行之后被销毁。如果是这样,为什么这不适用于这种方法链接?
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;
}