类型转换失败,c++报错: cannot bind non-const lvalue reference of type ‘int&’ to an rvalue of type ‘int’
源码如下:
#include<iostream>
using namespace std;
void func(int& param)
{
cout << param << endl;
}
int main()
{
long long param;
func(param);
return 0;
}
编译器报错为:
error: cannot bind non-const lvalue reference of type ‘int&’ to an rvalue of type ‘int’
10 | func(param);
3:16: note: initializing argument 1 of ‘void func(int&)’
3 | void func(int& param)
| ~~~~~^~~~~
开始很好奇,为long long转为int这里会造成数据丢失,但是报错是无法把左值引用绑定到右值。
错误信息中提到“右值”是因为在 C++ 中,某些情况下,编译器会将类型不匹配的表达式视作右值。虽然 param 是个左值,但由于它的类型与函数参数不匹配,编译器无法将其视作有效的绑定。