`typedef enum {} t` 是否允许 C++0x 中的作用域枚举元素标识符?

发布于 2024-08-21 02:59:30 字数 247 浏览 1 评论 0原文

我相信新的 C++ 标准允许枚举类型有一个额外的“范围”:

enum E { e1, e2 };

E var = E::e1;

因为我知道很多包含旧 C 风格枚举 typedef 的源文件,我想知道新标准是否允许对这些匿名枚举类型使用 typedef :

typedef enum { d1, d2 } D;
D var = D::d1; // error?

I believe the new C++ standard allows for an extra "scope" for enumerated types:

enum E { e1, e2 };

E var = E::e1;

Since I know lots of source files containing the old C-style enum typedef, I wondered if the new standard would allow using the typedef for these otherwise anonymous enumerated types:

typedef enum { d1, d2 } D;
D var = D::d1; // error?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

番薯 2024-08-28 02:59:30

新标准将添加一种新的强枚举类型,但语法会略有不同,并且旧式枚举将兼容(C++03中的有效代码将是有效的C++0x代码),因此您不需要尽一切努力保持遗留代码有效(不是 typedef,不是其他任何东西)。

enum class E { e1, e2 }; // new syntax, use E::e1
enum E2 { e1, e2 }; // old syntax, use e1 or E2::e1 (extension)

此处有一个 C++ 常见问题解答特定问题。

The new standard will add a new type of strong enum, but the syntax will be slightly different, and old style enums will be compatible (valid code in C++03 will be valid C++0x code) so you will not need to do anything to keep legacy code valid (not the typedef, not anything else).

enum class E { e1, e2 }; // new syntax, use E::e1
enum E2 { e1, e2 }; // old syntax, use e1 or E2::e1 (extension)

There is a C++ FAQ here that deals with this particular issue.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文