Typedef的匿名类

Ziz*_*Tai 10 c++ c++11

以下两个定义之间的任何方面(句法限制,性能等)是否有任何差异?

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

struct Foo { int a, b, c; };
Run Code Online (Sandbox Code Playgroud)

(我问的是,因为第一种形式在许多using声明中放在美学上更均匀.)

编辑:评论中链接的帖子并不完全回答我的问题.我更关注上述两个定义在使用方面的差异,而那篇文章主要回答了它们是如何区别的,以及它们是什么,我认为.

Bri*_*ian 13

以下是我能想到的一些差异:

  • (显而易见)您不能为未命名的类声明任何构造函数,析构函数或赋值运算符.
  • 您不能转发声明未命名的类,包括作为另一个类的朋友.
  • 您无法标记未命名的类final.
  • struct Foo可以在与命名的函数或变量相同的声明区域中声明Foo,但显然,您不应该这样做.using Foo = ...不允许你这种自由.

  • 另外:"(§9.4.2.4[class.static.data])直接或间接包含在未命名类中的未命名类和类不应包含静态数据成员." (4认同)