【问题标题】:Objects and values in C++ [duplicate]C ++中的对象和值[重复]
【发布时间】:2014-02-09 17:44:25
【问题描述】:

首先,对不起我的英语。

根据 C++11 标准:

§[basic].3:实体是值、对象、引用、函数、枚举器、类型、类成员、模板、模板特化、命名空间、参数包或 this。

不就是每个值和对象吗?例如,nullptr 标识了 nullptr_t 类型的“值”,但是,由于 nullptr_t 是标量类型,它也是对象类型,因此 nullptr 是对象。

对于this,我有同样的争议:当this 在正确的情况下使用时(在非静态成员函数或数据成员初始化器中)是指针纯右值,因此是标量/对象类型,因此一个对象。

不是吗?

【问题讨论】:

  • this 是一个关键字。 评估 this 产生一个指针纯右值。
  • @KerrekSB 我看过这个问题,但问题的重点不同,并没有解决我的问题。
  • @KerrekSB nullptrtrue 也是关键字,不会出现在实体列表中,与 this 相反。
  • 好点。我想this 并不重要,因为它受制于范围和隐藏规则,不像truenullptr。术语“实体”可能只是用于构建规则的辅助结构。
  • @KerrekSB 我也不明白为什么将值定义为实体,因为我看不出在哪些情况下可以为值定义名称,因为其他时候,所有值是一个对象(或需要创建一个临时对象才能使用它)。因此,您将对象的名称定义为操作值的工具,而不是直接定义值。

标签: object c++11 entity


【解决方案1】:

1.8/1 ...对象是一个存储区域...

nullptrnullptr_t 就像 1int - 它命名了类型的值,但它不占用存储空间,因此不是对象。

this 也不是。 thisnullptr_ttrue 的不同之处在于,孤立地看,您无法判断它是哪种类型的值。因此,为了在表达式中描述其行为,需要考虑该表达式出现的上下文。这需要在标准文本中添加一些额外的体操;出于这个原因,this 在一些地方被特别提到了。

【讨论】:

  • 感谢您对this 的称赞,但我认为我的问题没有很好地表达。我会以不同的重点提出其他问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-03
  • 2011-01-21
  • 2018-06-18
  • 1970-01-01
  • 2020-01-01
  • 2017-12-29
相关资源
最近更新 更多