【发布时间】:2015-03-13 14:46:35
【问题描述】:
我只是不明白为什么枚举的大小与编译器相关,而类的大小却不相关。
我的代码示例:
class A;
enum E; // must be enum E : int; in order to compile
void f(const A & param);
void f(const E & param);
我在这里谈论的是标准 C++ 编译器。 我知道 MSVC 让它编译并且工作正常。所以问题是:
为什么这还没有标准化?
【问题讨论】:
-
它比你想象的还要混乱:我认为 msvc 将未调整大小的枚举强制为 32 位。
-
@Yakk 我也这么认为。但是为什么尺寸还是要相关的呢?
-
我不确定它的大小是否相关,而是显然不是 C++03 语法。您可以使用范围枚举,而不是大小,使用关键字 struct 或 class 之一。相关标准:“声明无范围枚举的不透明枚举声明不得省略枚举基数。”
-
不确定是否相关,但在我的关联电路中确实发生了标准不允许的唯一情况,是迄今为止的现有实践(主要作为 Visual C++ 语言扩展)。所以,也许是政治。
-
我对阅读有关标准化的内容有非常模糊的记忆。它基本上是编译器编写者容易做的事情。即,
enum class X:type;和enum class X:type { values... };是容易实现的目标(易于实施且有用)。您所描述的可能并不那么容易(因为我们现在有一个编译器有一个不知道大小的枚举,这在更改之前是不可能的)。我对这段记忆没有信心。
标签: c++ c++11 enums forward-declaration