如果您不通过引用返回某个函数的内容,在什么情况下会产生错误?
问问题
129 次
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 回答