首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++中真的有匿名类/结构吗?

C++中真的有匿名类/结构吗?
EN

Stack Overflow用户
提问于 2021-08-13 22:44:41
回答 1查看 171关注 0票数 2

我对许多网站感到困惑:例如,当class/struct没有名字时,人们会把它称为匿名者:

代码语言:javascript
复制
struct{
   int x = 0;
}a;

我认为上面的示例创建了一个未命名的struct,而不是匿名的struct。我认为匿名的struct/class在结束类体的大括号和结束类定义的分号之前没有名称,也没有声明符:

代码语言:javascript
复制
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,代码运行得很好。原因是编译器将自动合成匿名联盟的一个对象,我们可以直接访问它的成员。(虽然有一些限制)。
  • 我认为编译器不允许匿名类/结构,因为它不会自动创建该类型的对象。

所以我的想法正确吗?如果没有,请引导我。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-14 00:58:27

在C++标准(N4659)的术语中,只有联合才能是“匿名的”。在标准中,“匿名类”和“匿名结构”这两个短语都不会出现。事实上,“匿名”这个词在标准中只出现了44次: 42次后面跟着"union",两次出现在索引的"union“子列表下。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68779028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档