我对许多网站感到困惑:例如,当class/struct没有名字时,人们会把它称为匿名者:
struct{
int x = 0;
}a;我认为上面的示例创建了一个未命名的struct,而不是匿名的struct。我认为匿名的struct/class在结束类体的大括号和结束类定义的分号之前没有名称,也没有声明符:
class { // Anonymous class
int x_ = 0;
}; // no delcarator here当然,该标准拒绝上述声明,因为它是不正确的。
union可以是未命名的,也可以是匿名的:
联合{ char无符号red_;char无符号green_;char无符号blue_;长无符号color_ = 255;} color;在上面的示例中,我声明了一个未命名的(但不是匿名的)联合,这与上面的类/结构类似。
union可以是匿名的:
//不能在命名空间中声明,除非在关键字static之前添加union,该关键字使未命名对象的链接成为此TU /*静态*/ union{ //匿名的联合char无符号red_;char无签名的green_;char无签名的blue_;long未签名的color_ = 255;;};// no声明符green_ = 247;// ok访问匿名联盟的成员数据green_union,代码运行得很好。原因是编译器将自动合成匿名联盟的一个对象,我们可以直接访问它的成员。(虽然有一些限制)。所以我的想法正确吗?如果没有,请引导我。谢谢!
发布于 2021-08-14 00:58:27
在C++标准(N4659)的术语中,只有联合才能是“匿名的”。在标准中,“匿名类”和“匿名结构”这两个短语都不会出现。事实上,“匿名”这个词在标准中只出现了44次: 42次后面跟着"union",两次出现在索引的"union“子列表下。
https://stackoverflow.com/questions/68779028
复制相似问题