c++ - §9.5/8 中可能含糊不清的陈述

标签 c++ c++11 language-lawyer

来自 C++11 标准的§9.5/9(强调我的):

A union-like class is a union or a class that has an anonymous union as a direct member. A union-like class X has a set of variant members. If X is a union, a non-static data member of X that is not an anonymous union is a variant member of X.

粗体部分是不是说类 union 类之间是类还是 union ,只有是 union 才能有非匿名 union 的非静态变体成员?如果是这样,为什么?它对代码有什么实际影响?

我实际上在质疑这个陈述是否意味着“如果 X 是一个类 union 类 ...”。那对我来说就完全有意义了。

不管怎样,这个条款在过去几天一直困扰着我,我希望完全理解它的意思。

最佳答案

不,您尝试的澄清是错误的。这是一个类似 union 的类 X:

struct X
{
    int a;
    union {
        double b;
        long c;
    };
};

X::a 是类 union 类 X 的非静态数据成员,它不是匿名 union 。但它绝对不是变体成员。

union 体的所有非静态数据成员都是变体成员。对于不是 union 的类 union 类,只有那些嵌套在 union 子对象中的类才是变体成员。

关于c++ - §9.5/8 中可能含糊不清的陈述,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25778072/

相关文章:

c++ - 为什么 std::ranges::filter_view 对象必须是非常量才能查询其元素?

c++ - 与tbb::task_arena和tbb::task_scheduler_observer链接时出错

c++ - 数组初始值设定项必须是初始值设定项列表或字符串文字

c++ - 将 std::initializer_list 与 bool 重载函数一起使用时重载决议的意外行为

c++ - 双右尖括号 (>>) 在特定情况下会产生语法错误

c++ - 当一个功能完成另一个功能打开时我该怎么办?

c++ - VS 2012 中的简单 regex_match 不起作用

c++ - 为什么映射的构造函数允许我们在参数中传递比较器对象?

c++ - 如何在 C++ 中逐行向文件添加内容?

c++ - 默认(用户定义)构造函数和带默认参数的构造函数之间的区别?