C++ Standard (4/5) the lvalue-to-rvalue conversion is not done on the operand of the unary & operator.
例如:
int x;
int *p = &x;
在上面的例子中,p
是 &x
都是左值吗?或者什么是合适的例子?
编辑:
这个呢?
int &r = x;
我确定此语句中不会有任何转换,但我很困惑 & 运算符如何参与其中?
最佳答案
引用表明转换不适用于一元&
(在本例中为x
)的操作数。所以 &
的操作数是一个左值。
这与一元运算符 +
不同。如果您编写 +x
,则左值到右值的转换 应用于子表达式 x
(在这种情况下具有未定义的行为,因为 x
还没有被初始化)。
通俗地说,“左值到右值转换”的意思是“读取值”。
引用没有说明 &
的结果,它实际上是一个右值。在 int *p = &x;
中:
x
是一个左值,指的是那个名字的变量,&x
是一个右值,它是初始化程序的一部分(具体来说,是一个赋值表达式),p
既不是右值也不是左值,因为它不是(子)表达式。它是正在定义的变量的名称。在 C++ 声明符语法中,它是 declarator-id(在 C++03 标准中为 8/4)。
int &r = x;
根本不使用 &
地址运算符。声明符中的 &
字符只是表示 r
是对 int 的引用的语法,它不采用 r
的地址。在 C++ 声明符语法中,它实际上称为 ptr-operator。
关于c++ - 会发生左值到右值的转换吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8488606/