0

如果您不通过引用返回某个函数的内容,在什么情况下会产生错误?

4

3 回答 3

2

如果您不通过引用返回某个函数的内容,在什么情况下会产生错误?

将答案限制为确切询问的内容,
每当您希望函数的返回值充当左值并且您不通过引用返回时,它将产生错误。

更常见的示例是重载operator [](数组订阅运算符),您必须通过引用返回才能使用[]lhs 或更正确地将其用作左值。

一个例子

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:错误:左值需要作为赋值的左操作数

于 2012-04-30T07:45:28.337 回答
2

默认操作应该是按值返回。您想要返回引用的主要情况是当您想要公开较大对象的某些“部分”时;例如向量或地图中的元素。重要的是,引用的对象必须具有超出调用函数的生命周期。

于 2012-04-30T07:40:47.597 回答
2

问题应该是什么时候通过引用返回是不安全的。每当您通过引用将局部变量返回给方法时,您都在调用未定义的行为。

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

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

于 2012-04-30T07:29:45.003 回答