【问题标题】:Named struct vs. type alias for an unnamed struct命名结构与未命名结构的类型别名
【发布时间】:2018-07-11 13:31:45
【问题描述】:

在 C++ 中,有一个命名结构在语义上是否等效

struct S { int x; };

对比未命名结构的类型别名

using S = struct { int x; }

?

使用第一个或第二个版本的 S 有什么不同,或者这些变体完全可以互换吗?还是很有可能某些编译器与第二个版本有问题?

【问题讨论】:

  • 好吧,你不能有一个标题与第一个标题和另一个标题与第二个标题。而且你不能给第二个构造函数或析构函数
  • @M.M - 你确定 c'tor 和 d'tor 吗? IIRC,能够命名类就足够了。只是更难说清楚。编辑:NVM,S 不能用于命名类型coliru.stacked-crooked.com/a/3e9564b0009f5b04
  • @StoryTeller:你如何用未命名的结构做相当于struct S { S() { std::cout << "C";} ~S() {std::cout << "D";} }; 的操作? C++ 没有将构造函数命名为 self 或类似名称。
  • @StoryTeller: 我们不能使用别名来定义构造函数/析构函数Demo

标签: c++ struct compiler-errors


【解决方案1】:

具有该上下文的 using 关键字是在 C++11 中引入的,这意味着使用 C++98 标准的旧编译器将无法编译它。

您也将无法转发声明您的结构。

因此,不,它们不是 100% 等效的;但在某些情况下 using 可以代替通常的声明。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-26
    • 2015-03-03
    • 1970-01-01
    • 2015-10-30
    相关资源
    最近更新 更多