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