c++ - 从类型 'int&' 的临时类型 'int' 的非常量引用的无效初始化

标签 c++ reference temporary lvalue rvalue

#include<iostream>
using namespace std;

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

任何人都可以解释错误的原因吗?

谢谢

最佳答案

10 是一个常量,所以您不能传递对它的引用,只是因为更改常量的整个概念很奇怪。

引入引用是为了解决 C(和更早的 C++)中的一个棘手问题,事实上一切都是按值传递的,如果你想将更改反射(reflect)回调用者,你必须传入一个指针并在函数中取消引用该指针以获取实际变量(用于读取和写入它)。

在下一个 ISO C 标准中,这将是非常重要的好东西。虽然必须使用指针可能会让我们中的一些人在 Stack Overflow 上获得很多赞誉,但它对世界上的 C 程序员并没有多大好处:-)

您的问题的解决方案很简单。如果您不需要更改函数中的项目,只需正常传递即可:

int fun (int x) { ... }

如果您确实需要更改它,那么您必须传递一些可以更改的内容:

int xyzzy = 10;
cout << fun (xyzzy);

关于c++ - 从类型 'int&' 的临时类型 'int' 的非常量引用的无效初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16767345/

相关文章:

c++ token 模拟以从服务修改HKEY_CURRENT_USERS

c++ - 在变量被另一个线程写入后以及在该线程加入后从主线程访问变量是否安全?

c# - C++ 与 C# BadPointer/BadReference?

c++ - g++ undefined reference 静态成员变量

C++0x 右值引用和临时对象

c++ - 如何从另一个命名空间中扩展 C++ 命名空间?

c++ - 如何在 NCurses/PdCurses 中实现滚动或列表框? ( C )

c# - Nuget 安装包成功但未向 csproj 添加引用

c++ - 隐式类型转换的临时工的生命周期

sql - 如何在 SQL Server 2012 中创建的临时表上找到索引列表