为什么 long long 到 int 的错误转换会导致编译器出错:无法将非常量左值绑定到右值

问题描述 投票:0回答:1

我的代码如下。我知道我无法将

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)
|           \~\~\~\~\~^\~\~\~\~
c++
1个回答
0
投票

该函数需要对

int
的引用,但您向其传递了
long long
,因此编译器会创建一个临时
int
来为其分配
long long
。该临时值是一个右值,非常量引用无法绑定到它。

const
添加到参数中,代码即可运行。 const 引用可以绑定到右值。

© www.soinside.com 2019 - 2024. All rights reserved.