返回类构造函数调用的生命周期

时间:2015-05-31 04:18:09

标签: c++

这是我的代码:

class Value{
public:
int x;
Value(int y):x(y){

    }
};


Value getVal(){
  return Value(2);
}

int main() {


const Value & rec = getVal();
return 0;
}

我的问题:

  1. 执行此操作return Value(2);是否安全?

    一旦函数结束,创建的对象是否会过期? 如果有,那么如何正确接收它?

  2. 为什么我需要声明const如果我正在制作像我的例子一样的参考变量?

1 个答案:

答案 0 :(得分:0)

  
      
  1. 这样做是否安全返回Value(2);
  2.   

如果您收到如下返回值,则允许(因此安全):

Value rec = getVal(); // also `const Value rec = getVal();`

const Value& rec = getVal();

对于上述两种情况,变量的范围不会被破坏并保持到接收器的范围,即rec。 请参阅Return Value Optimization

  
      
  1. 如果我正在制作参考变量,为什么我需要声明const?
  2.   

不允许通过简单参考接收 如1.中所述,您也可以将其声明为一个简单变量。编译器不会制作不需要的副本。如果您想将rec设为不可修改,则可以将其声明为const引用。