通过引用和值返回。 C ++

时间:2012-04-30 07:28:26

标签: c++ visual-c++

如果您没有通过函数的引用返回某些内容,会在什么情况下生成错误?

3 个答案:

答案 0 :(得分:2)

问题应该是何时通过引用返回是不安全的。每当通过引用向方法返回一个本地变量时,您就会调用未定义的行为。

当您没有正确实施复制构造函数时,按值返回是不安全的。

如果复制构造函数被声明为私有,并且您尝试按值返回,则会收到错误。

答案 1 :(得分:2)

默认操作应该是按值返回。主要案例在哪里 你想要公开一些时候想要返回引用 较大物体的“一部分”;例如向量中的元素或 地图。重要的是所提到的对象必须有一个 超出调用函数的寿命。

答案 2 :(得分:2)

如果您没有通过函数的引用返回某些内容,会在什么情况下生成错误?

限制对确切问题的答案,
只要您希望函数的返回值充当l值,并且您不通过引用返回,那么它将生成错误。

更常见的例子是重载operator [](数组订阅运算符),您必须通过引用返回才能在lhs上使用[]或更正确地使用它作为一个l值。

An example

class Myclass 
{ 
     int i;
     public:
     /*Not returned by reference- gives error*/
     int operator[](int idx){ return i;}

     /*Returned by reference- gives no error*/
     //int& operator[](int idx){ return i;}
};

int main()
{
   Myclass  obj;
   obj[1]= 10;
   return 0;
}

输出

  

prog.cpp:在函数'int main()'中:
  prog.cpp:16:错误:左值作为赋值的左操作数