【问题标题】:Is the hard coded value in function argument a const reference?函数参数中的硬编码值是 const 引用吗?
【发布时间】:2015-06-05 08:45:46
【问题描述】:

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

#include<iostream>
using namespace std;

int fun(int &x)
{
    return x;
}
int main()
{
    cout << fun(10);
    return 0;
}

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

要使其编译成功,我有 2 个选项: 1.我们必须使用“int fun(const int &x)”而不是“int fun(int &x)” 2. 使用“int i=10;cout

所以,看起来,如果我们将硬编码值传递给函数,它将被视为“常量引用”。

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

【问题讨论】:

  • 您可以简单地删除 '&' 并使用 pass-by-value 而不是 pass-by-reference。
  • 是的,这当然可以,但 Q 是为什么它不能与 & 一起使用。

标签: c++


【解决方案1】:

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

这样想:如果fun 中的x 是一个非常量左值引用,我们应该可以修改它。但是,我们传入了整数文字10。修改整数文字应该是什么意思?这没有意义,所以你不能。

要解决此问题,您应该通过引用 const 来获取您的论点(假设您不打算在 fun 中修改它):

int fun(const int &x)

【讨论】:

  • thanks ,它给出了一个清晰的理解,所以它意味着“10”和“&x”完全一样,我认为,“x是对10的引用”,所以在引用上有区别到 CONSTANT ,并引用包含常量的变量:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-15
  • 1970-01-01
  • 2021-07-04
  • 1970-01-01
  • 2012-02-25
  • 2012-06-22
  • 1970-01-01
相关资源
最近更新 更多