C++踩坑记录:C++ 非常量引用的初始值必须为左值
1. 报错:
2. 举例代码:
int fun(int& c)
{
int a = c+1;
return a;
}
int funb(int b)
{
return b;
}
int main()
{
int b = 10;
int& a= funb(b); //报非常量引用的初始值必须为左值
int& c = 10;// 报非常量引用的初始值必须为左值
cout << fun(funb(b)) << endl;// 报非常量引用的初始值必须为左值
return 0;
}
3. 问题原因:
1)通常函数的正常返回值是一个右值,所以给引用初始化复制一个函数返回值是有问题的。
2)类似于nt& c = 10 给引用赋值了一个常量右值
4. 解决办法
将 int& a= funb(b); 拆成两歨, 变成int c= funb(b); int& a=c;
int fun(int& c)
{
int a = c+1;
return a;
}
int funb(int b)
{
return b;
}
int main()
{
int b = 10;
int d = funb(b);
int& a= d;
cout << fun(d) << endl;
return 0;
}