0

6.3.2.1节(第 72 页)解释说

  • Anlvalue表示一个对象,即一块内存。
  • 在表达式求值期间,对象被转换为它们的值,即不再是对象。值得注意的例外是=, &, ., ++, --,的左操作数sizeof
  • 数组通常转换为指向其第一个元素的常量指针。同样的操作数&是一个例外。
  • 函数被隐式转换为指向函数的指针。一元的目标除外&

为什么一元&如此特别?为什么|从来没有提到一元?

4

1 回答 1

2

我不知道您的问题出在哪里,但是您给出的大多数断言至少部分错误

  • 左值表示一个对象,即一块内存。

一个对象不一定是一块内存,值得注意的例外是用 . 声明的变量register。对象是具有明确定义的寿命和类型的可识别位置。

  • 在表达式求值期间,对象被转换为它们的值,即不再是对象。

这是在奇怪地陈述事情。在表达式求值期间,对象被...求值。对象本身不变

  • 值得注意的例外是 =、&、.、++、--、sizeof 的左操作数。

您在这里混合了非常不同类型的运算符。运算符的值如何sizeof成为左值,我无法理解。您可能的意思是左值转换不适用于它们?这仅仅是因为这些运算符作用于对象(更改对象)或需要对象的属性(而不是可能转换的值)。

  • 数组通常转换为指向其第一个元素的常量指针。& 的操作数也是一个例外。

这里的sizeof操作员是另一个。

  • 函数被隐式转换为指向函数的指针。除非是一元 & 的目标。

...它们只是显式转换的。

于 2013-05-08T07:29:06.807 回答