c++ - 为什么不是对临时对象的非常量引用?

标签 c++ temporary-objects

Possible Duplicate:
Does a const reference prolong the life of a temporary?
prolonging the lifetime of temporaries

C++ 只允许将临时对象分配给 const 引用。它不允许分配临时对象来引用。

例如:

String& a = String("test");         // Error
const String& a = String("test");   // Ok

我到处搜索这个结果,我只看到以下答案

  1. 修改临时对象会导致无法识别的问题
  2. 修改临时对象是危险的
  3. 在某些时候,你会忘记它是一个临时变量

据说,临时对象在声明后消失。所以你不应该修改它。

如果 C++ 如此热衷于阻止修改临时对象,它应该阻止读取临时对象吧?如果临时对象消失了,那么从那里读取内容没有意义吗?可能发生权利的情况也可能涉及读取。

那为什么它一直阻止单独写入并允许读取?

请给我一个可靠的 c++ 代码解释。

请不要通过指出一些替代方案来偏离问题。请用代码给出可靠的答案,为什么允许使用 const int & 而不允许临时对象使用 int &。

有人说 && 在那里.. 我的问题不同.. 另一个说,改变不会反射(reflect)..即使它是 const int & 也不会反射(reflect)。例如:双a;常量 int & i = a;一个++;不会影响i..

最佳答案

最初不允许引用临时对象的情况是函数参数。假设这是允许的:

void inc(double& x)
{ x += 0.1; }

int i = 0;
inc(i);

为什么 i 没有改变?

关于c++ - 为什么不是对临时对象的非常量引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13826897/

相关文章:

c++ - 非常量引用绑定(bind)到临时的 Visual Studio 错误?

MySQL从SELECT创建临时表保留原始字段长度

c++ - 程序统计工具

c++ - 在 dll 中使用 std::list 无法解析的外部符号

c++ - 为什么 g++ 在启用 `-fpic` 的情况下不发出与构造函数相关的 noexcept 警告?

c++ - 为什么不同编译器使用c++字符串+字符串临时对象会有区别?

c++ - 为什么返回对字符串文字的引用是对临时对象的引用?

python - 在 VS2013 中构建/包含 Boost.Python

c++ - 为什么我无法创建唯一指针

c++ - static_cast 和临时创建(最终版)