3 回答
TA贡献1824条经验 获得超6个赞
在C ++ 0x中也可以进行枚举的前向声明。以前,枚举类型无法向前声明的原因是因为枚举的大小取决于其内容。只要枚举的大小由应用程序指定,就可以向前声明:
enum Enum1; //Illegal in C++ and C++0x; no size is explicitly specified.
enum Enum2 : unsigned int; //Legal in C++0x.
enum class Enum3; //Legal in C++0x, because enum class declarations have a default type of "int".
enum class Enum4: unsigned int; //Legal C++0x.
enum Enum2 : unsigned short; //Illegal in C++0x, because Enum2 was previously declared with a different type.
TA贡献1875条经验 获得超5个赞
鉴于最近的发展,我在这里添加了一个最新的答案。
您可以在C ++ 11中转发声明枚举,只要您同时声明其存储类型即可。语法如下所示:
enum E : short;void foo(E e);....enum E : short{ VALUE_1, VALUE_2, ....}
实际上,如果函数永远不会引用枚举的值,那么此时您根本不需要完整的声明。
G ++ 4.6及更高版本(-std=c++0x
或-std=c++11
更新版本)支持此功能。Visual C ++ 2013支持这一点; 在早期版本中它有一些我尚未想到的非标准支持 - 我发现一些简单的前向声明是合法的,但是YMMV。
- 3 回答
- 0 关注
- 554 浏览
添加回答
举报