class obj {
};
obj func() {
return obj();
}
int main() {
obj& o = func(); // possible?
}
函數返回值的返回值的範圍是什麼? 換句話說,在調用這個函數的範圍內,是否可以接受值對象返回的引用?函數返回值的範圍
class obj {
};
obj func() {
return obj();
}
int main() {
obj& o = func(); // possible?
}
函數返回值的返回值的範圍是什麼? 換句話說,在調用這個函數的範圍內,是否可以接受值對象返回的引用?函數返回值的範圍
是的,你可以綁定到一個函數的返回值的參考。這將返回對象的生命週期擴展爲引用的生命週期(如果它是全局的或本地函數的),或者延伸到當前函數的末尾(如果引用是數據成員)。
但是,您不能將臨時(prvalue)綁定到非const
左值引用。因此,它是這樣的:
obj& o = func(); // illegal, because non-const lvalue ref
const obj& o = func(); // fine, lifetime extended
obj&& o = func(); // fine, lifetime extended
你不能採取臨時的非const引用。
你可以做
obj o = func(); // new obj created but copy constructor may be ellided
const obj& o = func(); // lifetime extended
obj&& o = func(); // lifetime extended
你能解釋爲什麼「非const」是無效的嗎? – mkmostafa
@mkmostafa:在數以千計的現有問題上都有很好的覆蓋,更不用提你的C++教科書了。 –
它不是由語言允許採取的臨時非const引用,但是,您可以:
const obj& o = func();
// or
obj&& o = func();
// or simply
obj o = func();
常量OBJ&O = FUNC(); //可能 – AnatolyS
所以參考是有效的。 const是否相容? – mkmostafa
[非常量引用如何不能綁定到臨時對象?](http://stackoverflow.com/questions/1565600/how-come-a-non-const-reference-cannot-bind-to -a-temporary-object) – LogicStuff