我有兩個代碼段,我希望同樣的結果:C++採取臨時對象的地址
第一招:
SomeClass somefunc(...){
SomeClass newObj;
//some codes modify this object
return newObj;
}
int main(){
SomeClass *p;
p = &(somefuc(...));
}
第二個:
SomeClass *somefunc(...){
SomeClass newObj;
//some codes modify this object
return &newObj;
}
int main(){
SomeClass *p;
p = somefunc(...);
}
爲什麼當我嘗試構建第一個代碼段時,第二個代碼段沒有產生錯誤時,我得到了「獲取臨時對象的地址」錯誤?
請顯示您的實際代碼。 – tenfour
片段無法編譯。第二個是因爲你試圖從聲明爲返回SomeClass的函數返回'SomeClass *'。還要注意'newObj'不是一個臨時的 - 它是一個命名變量。取其地址是沒有問題的 - 問題在於在變量的生命週期結束後使用所述地址。 –
第二個例子甚至不應該編譯,而且'p =&(somefuc(...));'不應該編譯,因爲你不能得到一個右值的地址 – vsoftco