引用范围外似乎不相关的规范

  • 本文关键字:不相关 范围 引用 c++
  • 更新时间 :
  • 英文 :


我正在阅读offsetof的参考,并看到以下内容:

给定类型为具有静态存储持续时间的对象o&(o.member)应为常量表达式,并指向o的子对象否则,行为未定义特别是,如果成员是静态数据成员、位字段或成员函数,则行为是未定义的。

我的第一个问题是,为什么这会出现在offsetof的引用中,因为我看不出它与offsetof有任何明显的相关性。

第二,关于上面引用的重点;否则";意思是这是否意味着对于具有自动或动态存储持续时间的对象o&(o.member)是未定义的?我以为这样的表达是合法的,我是不是遗漏了什么?还是因为括号?

相关性在于,这说明了offsetof的要求。不用说,你不能传递两个任意的参数并给出有意义的结果。因此,offsetof的要求是通过一个例子来说明的。offsetof是这样指定的:

#define offsetof(type, member) ...

宏的第一个参数的名称是type,第二个参数的名字是member。有了这些:

给定具有静态存储持续时间的类型为o的对象,。。。

这概述了需求:假设您有一个类型为type(宏的第一个参数(的ostatic对象,此外:

&(o.member(应为常数表达式,并指向o.的子对象

。。。这意味着,在这种情况下,如果o.member也是一个常量表达式,并且引用了一些";子对象";,又称o的成员,属于type类型。。。

那么这就是这个宏的要求,以便offsetof给您指定的结果。

你问:

什么是"否则";意思是

这里,";否则";指除满足上述所有条件之外的任何其他条件。

最新更新