我知道使用引用返回臨時變量不起作用,因爲臨時對象在函數終止後會丟失,但由於返回的臨時對象被分配給另一個對象,因此下面的代碼片段可以工作。使用引用行爲不同的返回tmp
我假設臨時對象在函數調用行後被銷燬。如果是這樣,爲什麼這種方法不適用於這種方法鏈?
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;
}
怎麼樣R值參考在C + + 11? – shivakumar
@ shivakumar:如果你想談論他們,請提出一個新問題。這對於這個簡單的問題來說有點超出範圍。 ;) –
正如你所說,對於某些工作的定義,它會起作用。我說它總是適用於問題中提出的簡單對象和簡單代碼。請參閱下面的答案。 – Amit