能否請你告訴我,如果這樣的代碼是正確的(根據標準):C++恆臨時一生
struct array {
int data[4];
operator const int*() const { return data; }
};
void function(const int*) { ... }
function(array()); // is array data valid inside function?
謝謝
能否請你告訴我,如果這樣的代碼是正確的(根據標準):C++恆臨時一生
struct array {
int data[4];
operator const int*() const { return data; }
};
void function(const int*) { ... }
function(array()); // is array data valid inside function?
謝謝
是的。臨時對象直到創建它的完整表達式的結尾纔有效;也就是說,直到函數調用返回之後。
我沒有我的標準副本,所以我不能給出確切的參考;但它在C++0x final draft的12.2中。
它在C++ 98中也是12.2。 – 2010-07-06 21:01:05
是。臨時文件有效期至其創建完整表達式的結尾。因此,在function
的調用返回之前,無名數組臨時有效,因此它的data
成員也是如此。
@Martin是的,我想確定它是有效的,而不是幸運的編譯巧合。我確實知道物體的壽命,但我不確定這個物體是否像這種 – Anycorn 2010-07-06 20:54:53
非常明智。作爲一個經驗法則,你通常可以期望,如果在編譯時可以檢查或執行某些東西,那麼它就是。當需要運行時檢查來阻止它時,通常會出現未定義的行爲。但是,正如你所說,確定總是更好。 – 2010-07-06 21:14:37