如果您没有通过函数的引用返回某些内容,会在什么情况下生成错误?
答案 0 :(得分:2)
问题应该是何时通过引用返回是不安全的。每当通过引用向方法返回一个本地变量时,您就会调用未定义的行为。
当您没有正确实施复制构造函数时,按值返回是不安全的。
如果复制构造函数被声明为私有,并且您尝试按值返回,则会收到错误。
答案 1 :(得分:2)
默认操作应该是按值返回。主要案例在哪里 你想要公开一些时候想要返回引用 较大物体的“一部分”;例如向量中的元素或 地图。重要的是所提到的对象必须有一个 超出调用函数的寿命。
答案 2 :(得分:2)
如果您没有通过函数的引用返回某些内容,会在什么情况下生成错误?
限制对确切问题的答案,
只要您希望函数的返回值充当l值,并且您不通过引用返回,那么它将生成错误。
更常见的例子是重载operator []
(数组订阅运算符),您必须通过引用返回才能在lhs上使用[]
或更正确地使用它作为一个l值。
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:错误:左值作为赋值的左操作数