Oracle® Solaris Studio 12.4:C++ 用户指南

退出打印视图

更新时间: 2014 年 12 月
 
 

4.4 对 enum 类型和变量进行前向声明

使用 -features=extensions 时,编译器允许对 enum 类型和变量进行前向声明。此外,编译器允许声明不完整 enum 类型的变量。编译器总是假定不完整 enum 类型的大小和范围与当前平台上的 int 类型相同。

以下是两行无效代码示例,如果使用 -features=extensions 选项,可对其进行编译。

enum E; // invalid: forward declaration of enum not allowed
E e;    // invalid: type E is incomplete

因为 enum 定义不能互相引用,并且 enum 定义不能交叉引用另一种类型,所以从来不必对枚举类型进行前向声明。要使代码有效,可以总是先提供 enum 的完整定义,然后再使用它。


注 -  在 64 位体系结构上,enum 要求的大小可以比 int 类型大。如果是这种情况,并且如果前向声明和定义在同一编译中是可视的,那么编译器将发出错误。如果实际大小不是假定的大小并且编译器没有发现这个差异,那么代码将编译并链接,但有可能不能正常运行。可能出现意外的程序行为,尤其是 8 字节值存储在 4 字节变量中时。

注 -  C++11 允许使用其他语法对 enum 类型进行前向声明。