2014-01-19 103 views
2
void foo(const C &); 
foo(C()); 

在這種情況下,臨時C對象住直到foo()結束。C++臨時對象的生命週期

但我的問題是:

struct C { operator int(); } 
void bar(int i); 
bar(C()); 

在這種情況下,有沒有臨時C對象住,直到bar()結束了嗎?如果沒有,有沒有辦法讓臨時對象直到bar()結束?

編輯:感謝user2109558,我知道代碼不起作用。然後下面的代碼工作正常嗎?

void bar(int i); 
void bar(C &&c) { bar(c); } 
+0

接受的答案不正確。見http://stackoverflow.com/questions/584824/guaranteed-lifetime-of-temporary-in-c –

+0

@MarkRansom嗯..?所以吧(C())可以嗎? – ikh

+0

閱讀答案併爲自己做出判斷。我的結論是,這是可以的。 –

回答

-2

沒有!代碼bar(C()); 等於 int num = C(); bar(num); 所以,臨時C對象不活,直到欄的末尾() 你必須改變bar功能parameter.such爲void bar(const C &)或添加全局C對象變量如:

C c; 
void bar(int i) { 
..... 

}

,但沒有建議這樣做。

+0

謝謝!請參閱編輯。 – ikh