【问题标题】:Definition of a variant member in the Standard标准中变体成员的定义
【发布时间】:2019-01-23 17:38:27
【问题描述】:

[class.union.anom]/4

类似联合的类是联合或具有匿名联合的类 作为直接会员。类似联合的类X 有一组变体 成员。如果X 是一个联合,则X 的一个非静态数据成员是 not an anonymous union 是 X 的变体成员。 此外,一个 属于X 成员的匿名联合的非静态数据成员 也是X的变体成员。至多一个变体成员 union 可能有一个默认的成员初始化器。

英语不是我的母语,但仅通过阅读本段,我就有一种印象,上面突出显示的句子仅适用于 X 是一个联合的情况,这会使这个定义不完整,因为它会错过类中变体成员的定义。因此,我必须得出结论,突出显示的句子必须适用于工会和阶级这两种情况。谁能证实这一点?如果不是这样,那么我认为我们在这一段中存在缺陷。

【问题讨论】:

    标签: c++ language-lawyer


    【解决方案1】:

    我的印象是上面突出显示的句子仅适用于 X 是联合的情况

    突出显示的句子适用于任何具有匿名联合成员的类联合类XX 可能是非联合类。

    一个例子:

    struct X {      // union-like, non-union class X
        union {     // anonymous union member of X
            int i;  // non-static data member of anonymous union
            float f;
        }
    }
    

    if 是联合体的变体成员,如类 X,根据突出显示的规则。

    【讨论】:

    • The highlighted sentence applies to any union-like class X that has an anonymous union member. X may be a non-union class. 引用不是这样说的:“如果 x 是联合体,x 的非匿名联合体的非静态数据成员是...... "
    • @WaldB If x is a union 是上一句的条件。它不再适用于下一句。
    • 这正是我的解释,排除在外。但我的印象是,任何阅读本段的人都会说相反,即突出显示的句子仅适用于工会案件。换句话说,我认为这里的措辞可以稍微改进一下。你不同意吗?
    • @WaldB 在我看来,没有歧义,但我想进一步澄清不会有什么坏处。比如添加一个和我的回答类似的例子。
    猜你喜欢
    • 2018-12-17
    • 2022-10-21
    • 2018-03-04
    • 1970-01-01
    • 2011-08-12
    • 1970-01-01
    • 2014-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多