这是我的代码:
class Value{
public:
int x;
Value(int y):x(y){
}
};
Value getVal(){
return Value(2);
}
int main() {
const Value & rec = getVal();
return 0;
}
我的问题:
执行此操作return Value(2);
是否安全?
一旦函数结束,创建的对象是否会过期? 如果有,那么如何正确接收它?
为什么我需要声明const
如果我正在制作像我的例子一样的参考变量?
答案 0 :(得分:0)
- 这样做是否安全返回
醇>Value(2)
;
如果您收到如下返回值,则允许(因此安全):
Value rec = getVal(); // also `const Value rec = getVal();`
或
const Value& rec = getVal();
对于上述两种情况,变量的范围不会被破坏并保持到接收器的范围,即rec
。
请参阅Return Value Optimization。
- 如果我正在制作参考变量,为什么我需要声明const?
醇>
不允许通过简单参考接收
如1.中所述,您也可以将其声明为一个简单变量。编译器不会制作不需要的副本。如果您想将rec
设为不可修改,则可以将其声明为const
引用。