C++17 标准在[support.types.layout]中说:
有条件地支持将宏与标准布局
offsetof
类以外的类型一起使用。
有条件支持
不需要实现来支持的程序结构
我觉得这个定义offsetof
不是很精确。
这是否意味着我可以安全地尝试将它与非标准布局类一起使用?
“有条件支持”与定义的实现有何不同?
编译器是否不支持
offsetof
生成诊断所需的特定类型的类?
C++17 标准在[support.types.layout]中说:
有条件地支持将宏与标准布局
offsetof
类以外的类型一起使用。
有条件支持
不需要实现来支持的程序结构
我觉得这个定义offsetof
不是很精确。
这是否意味着我可以安全地尝试将它与非标准布局类一起使用?
“有条件支持”与定义的实现有何不同?
编译器是否不支持offsetof
生成诊断所需的特定类型的类?
这是否意味着我可以安全地尝试将它与非标准布局类一起使用?
如果实施允许的话。有条件地支持意味着这必须记录在案。
“有条件支持”与定义的实现有何不同?
引用这个标准:
[defns.cond.supp] 有条件支持- “不需要实现支持的程序结构”
[defns.impl.defined] 实现定义的行为- “行为,对于格式良好的程序构造和正确的数据,取决于实现和每个实现文档”
关键区别在于实现的选择。完全按照标准所说的去做,或者根本不做。比。在没有选择拒绝的情况下以几种方式之一进行。
编译器是否不支持
offsetof
生成诊断所需的特定类型的类?
如果它是一个符合要求的实现,它将发出诊断([intro.compliance]/2.2由@TC 提供):
“如果程序包含违反任何可诊断规则或出现在本文档中描述为“有条件支持”的构造,而实施不支持该构造,则符合要求的实施应发出至少一条诊断消息。