2010-07-06 43 views
7

能否請你告訴我,如果這樣的代碼是正確的(根據標準):C++恆臨時一生

struct array { 
    int data[4]; 
    operator const int*() const { return data; } 
}; 

void function(const int*) { ... } 

function(array()); // is array data valid inside function? 

謝謝

+3

@Martin是的,我想確定它是有效的,而不是幸運的編譯巧合。我確實知道物體的壽命,但我不確定這個物體是否像這種 – Anycorn 2010-07-06 20:54:53

+0

非常明智。作爲一個經驗法則,你通常可以期望,如果在編譯時可以檢查或執行某些東西,那麼它就是。當需要運行時檢查來阻止它時,通常會出現未定義的行爲。但是,正如你所說,確定總是更好。 – 2010-07-06 21:14:37

回答

12

是的。臨時對象直到創建它的完整表達式的結尾纔有效;也就是說,直到函數調用返回之後。

我沒有我的標準副本,所以我不能給出確切的參考;但它在C++0x final draft的12.2中。

+1

它在C++ 98中也是12.2。 – 2010-07-06 21:01:05

6

是。臨時文件有效期至其創建完整表達式的結尾。因此,在function的調用返回之前,無名數組臨時有效,因此它的data成員也是如此。