C++-非常量引用的初始值必须是左值的处理方法-工作小记

引入

在进行函数传参时,发现此问题

1
2
3
4
5
struct node;
void fun(node*& node2);

node node1;
fun(&node1);//error!非常量引用的初始值必须是左值

其中涉及相关概念

  1. 左值与右值
  2. 右值引用

原因分析

因为 fun 的形参是 node*& 而传入的实参为 &node,中间涉及了一个隐式的类型转换:

1
2
node*& tmp = (node*)(&node1);
node2 = tmp;

此处&node1为右值,所以会报错

问题解决

  1. 避免隐式类型转换
1
2
node* tmp = &node1;
fun(tmp);//此时tmp为左值
  1. 修改函数形参
1
fun(node& node2);