函数实参中的硬编码值是const引用吗?

Is the hard coded value in function argument a const reference?

本文关键字:const 引用 编码值 实参 函数      更新时间:2023-10-16

为什么下面的程序编译失败:

#include<iostream>
using namespace std;
int fun(int &x)
{
    return x;
}
int main()
{
    cout << fun(10);
    return 0;
}

它给出以下编译错误:从"int"类型的右值初始化"int&"类型的非const引用无效

要使它成功编译,我有两个选项:1. 我们必须使用int fun(const int &x)而不是int fun(int &x)2. int i=10; count <<Fun (i);"而不是"count <<"func (10)"

因此,如果我们将硬编码值传递给函数,它将被视为"const引用"。

我在这里吗?还是有其他原因导致上面的程序无法编译?

不能编译,因为非const左值引用不能绑定到右值。

这样想:如果fun中的x是一个非const左值引用,我们应该能够修改它。然而,我们传入的是整型字面值10。修改整数字面量意味着什么?这没有意义,所以你不能。

要解决这个问题,您应该通过对const的引用来接受参数(假设您不打算在fun中修改它):

int fun(const int &x)