我的代码如下。我知道我无法将
long long
转换为 int&
,但为什么错误显示“无法将‘int&’类型的非常量左值引用绑定到‘int’类型的右值”? 在某些情况下,编译器是否有可能将类型不匹配的表达式视为右值?
#include <iostream>
using namespace std;
void func(int& param)
{
cout << param << endl;
}
int main()
{
long long param;
func(param);
return 0;
}
编译器错误是:
10:10: error: cannot bind non-const lvalue reference of type ‘int&’ to an rvalue of type ‘int’
10 | func(param);
| ^\~\~\~\~
3 | void func(int& param)
| \~\~\~\~\~^\~\~\~\~
该函数需要对
int
的引用,但您向其传递了 long long
,因此编译器会创建一个临时 int
来为其分配 long long
。该临时值是一个右值,非常量引用无法绑定到它。
将
const
添加到参数中,代码即可运行。 const 引用可以绑定到右值。