c++ - 错误 : invalid initialization of non-const reference of type ‘int&’ from an rvalue of type ‘int’

标签 c++ pointers reference

错误的形式:

int &z = 12;

正确形式:

int y;
int &r = y;

问题:
为什么第一个代码是错误的?标题中错误的“含义”是什么?

最佳答案

C++03 3.10/1 说:“每个表达式要么是左值,要么是右值。”请务必记住,左值与右值是表达式的属性,而不是对象的属性。

左值命名对象超出单个表达式。例如, obj*ptrptr[index]++x 都是左值。

右值是在它们所在的完整表达式末尾(“分号”)消失的临时值。例如, 1729x + ystd::string("meow")x++ 是所有右值。

地址运算符要求其“操作数应为左值”。如果我们可以获取一个表达式的地址,则该表达式是一个左值,否则它是一个右值。

 &obj; //  valid
 &12;  //invalid

关于c++ - 错误 : invalid initialization of non-const reference of type ‘int&’ from an rvalue of type ‘int’ ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8293426/

相关文章:

c++ - 调用抽象类的析构函数

c++ - C++ 中的 3d 卷积

c++ - 可变数量的(const)引用参数

c++ - 如何在 C++ 中创建高效的二维网格?

c - 列表不断打印

c++ - 危险类型转换?

c - 为什么这个 C 指针的引用值成为它的内存地址

c - 通过引用访问 va_arg 宏是错误的风格还是不正确的?

c++ - 在引用 (T&) 和常量指针 (T* const) 之间进行选择

php - 函数内部的静态变量不能保存对单例的引用