匿名类的typedef

10

以下两种定义在任何方面(语法限制,性能等)有区别吗?

using Foo = struct { int a, b, c; };

struct Foo { int a, b, c; };

(我问这个问题是因为当它放在许多using声明中时,第一个形式在美学上更加统一。)

编辑:评论中链接的帖子并没有完全回答我的问题。我更关心以上两个定义在用法上的区别,而那篇帖子主要回答了它们在什么方面不同,我想。


1
哦,当反射 TS 实现时,可能就会出现这种情况。 - chris
在C语言中,struct和typedef struct之间的区别是什么? - user2176127
@user2176127 不是,看一下我的编辑。 - Zizheng Tai
1个回答

13

以下是我能想到的一些不同之处:

  • (显而易见)您无法为匿名类声明任何构造函数、析构函数或赋值运算符。
  • 您无法预先声明一个匿名类,包括作为另一个类的友元。
  • 您不能将一个匿名类标记为 final
  • 在同一声明区域中可以声明 struct Foo 和名为 Foo 的函数或变量,尽管显然不应该这样做。但是,using Foo = ... 不允许您这样做。

4
同时:“(§9.4.2.4 [class.static.data])不具名类及直接或间接包含在不具名类中的类不得包含静态数据成员。” - AndyG
@AndyG Clang似乎允许它,但gcc不行。 - David G
1
你能否不使用 struct Foo 来引用这个类? - user253751
@immibis 当我尝试时,出现了一个错误,即使用声明将Foo重新声明为不同类型的名称... - Brian Bi
@Brian 我的意思是 using Foo = ...; struct Foo instanceOfFoo;。我猜这样不行,但我还没有尝试过。 - user253751
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接