【问题标题】:C++ Standard Layout and ReferencesC++ 标准布局和参考
【发布时间】:2013-04-06 07:40:22
【问题描述】:

根据 C++ 标准:

标准布局类是这样的类:

——没有非标准布局类(或此类类型的数组)或引用类型的非静态数据成员。

引用的哪些属性会阻止具有引用成员的类包含在标准布局类的定义中?

【问题讨论】:

  • 您是否认为需要存在此类属性?不需要……
  • “预防”是一个强词。从某种角度来看,引用只是为编译器提供了一个很好的借口,可以将结构视为一种抽象数据类型,而不是一个。存储布局规范。参考文献根本不必有任何自己的存储空间。

标签: c++ standard-layout


【解决方案1】:

一个标准的布局类就是为内存中的特定类型有一个定义良好的布局。在 C++ 中,引用不是对象,因此没有任何存储可以由符合标准的程序以明确定义的方式访问,即使实现通常必须为它们提供某种特定于实现的存储。

因此,在必须具有标准布局的东西中包含引用成员是没有意义的。

在关于 C++ 内存模型的部分的标准中有一个非规范性注释提到了这一点:

[ 注意:该语言的各种特性,例如引用和虚函数,可能涉及程序无法访问但由实现管理的额外内存位置。 ——尾注]

【讨论】:

  • 感谢您的出色回答:这很有意义。
猜你喜欢
  • 2012-07-03
  • 1970-01-01
  • 1970-01-01
  • 2012-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-19
相关资源
最近更新 更多