C++ 返回的类构造函数调用的生命周期
这是我的密码:C++ 返回的类构造函数调用的生命周期,c++,C++,这是我的密码: class Value{ public: int x; Value(int y):x(y){ } }; Value getVal(){ return Value(2); } int main() { const Value & rec = getVal(); return 0; } 我的问题是: 这样做是否安全返回值(2) 创建的对象是否在函数结束后过期? 如果确实如此,那么如何正确接收 如果我正在生成一个引用变量(如示例中所示),为什
class Value{
public:
int x;
Value(int y):x(y){
}
};
Value getVal(){
return Value(2);
}
int main() {
const Value & rec = getVal();
return 0;
}
我的问题是:
返回值(2)代码>
创建的对象是否在函数结束后过期?
如果确实如此,那么如何正确接收
const
rec
参考
如第1条所述。您还可以将其声明为简单变量。编译器不会生成不需要的副本。如果要使
rec
不可修改,则可以将其声明为const
引用。因此返回值(2)
也只是临时的?因为如果我使用指针来接收它,我会得到一个错误。@CarloBrew,Value(2)
本身是临时的。但如果以建议的有效方式接收,则其范围将保留到接收方的范围,即rec
。指针是不可能的,因为您无法存储临时的地址代码>,上面写着“[错误]获取临时地址”
Value rec = getVal(); // also `const Value rec = getVal();`
const Value& rec = getVal();