class obj {
};
obj func() {
return obj();
}
int main() {
obj& o = func(); // possible?
}
按值返回对象的函数的返回值的范围是多少? 换句话说,在调用此函数的范围内,是否可以获取由值对象返回的引用?
答案 0 :(得分:2)
你不能采用临时的非const引用。
你可以做
obj o = func(); // new obj created but copy constructor may be ellided
const obj& o = func(); // lifetime extended
obj&& o = func(); // lifetime extended
答案 1 :(得分:2)
是的,您可以绑定对函数返回值的引用。这会将返回对象的生命周期延长到引用的生命周期(如果它是全局或函数本地),或者延伸到当前函数的末尾(如果引用是数据成员)。
但是,您不能将临时(prvalue)绑定到非const
左值引用。所以它是这样的:
obj& o = func(); // illegal, because non-const lvalue ref
const obj& o = func(); // fine, lifetime extended
obj&& o = func(); // fine, lifetime extended
答案 2 :(得分:1)
语言不允许采用临时的非常量引用,但是可以:
const obj& o = func();
// or
obj&& o = func();
// or simply
obj o = func();