gpt4 book ai didi

c++ - 会发生左值到右值的转换吗?

转载 作者:太空狗 更新时间:2023-10-29 20:16:48 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com