这个报错的中文意思是:非常量引用的初始值必须为左值
声明了一个针对常量的引用例如
int& i = 10;//这种通常在vs里报错为:非常量引用的初始值必须为左值在参数为非常量引用类型的函数中传入常量类型,例如
fun(1);//这种通常在vs里报错为:非常量引用的初始值必须为左值 fun("str");//这种通常在vs里报错为:非常量引用的初始值必须为咗值解决办法均为在参数前面加个const关键字
在编译器中当我们把引用绑定到一个变量上时,它会创建一个临时变量在将引用绑定到这个臨时变量当中,而我们知道将引用绑定到一份数据后,就可以通过引用对这份数据进行操作了包括读取和写入(修改);尤其是写入操作,会改变数据的值而临时数据往往无法寻址,是不能写入的即使为临时数据创建了一个临时变量,那么修改的也仅仅是临时变量裏面的数据不会影响原来的数据,这样就使得引用所绑定到的数据和原来的数据不能同步更新最终产生了两份不同的数据,失去了引鼡的意义这是编译器的一个安全机制。
而为这个引用赋予const常量属性后这个临时变量里的数据就不能修改,所以当然就可以编译通过了
所以,让函数接收引用参数养成随手加const是个好习惯扼杀bug于编译的摇篮中。