当传递声明的struct或类时,必须通过引用或指针将它传递给函数。
但是,使用前向声明的枚举可以做些什么?它是否也必须通过引用或指针传递?或者,是否可以传递值?
下一个示例使用g ++ 4.6.1进行编译:
#include <iostream>
enum class E;
void foo( const E e );
enum class E
{
V1,
V2
};
void foo( const E e )
{
switch ( e )
{
case E::V1 :
std::cout << "V1"<<std::endl;
break;
case E::V2 :
std::cout << "V2"<<std::endl;
break;
default:
;
}
}
int main()
{
foo( E::V1);
foo( E::V2);
}
构建:
g++ gy.cpp -Wall -Wextra -pedantic -std=c++0x -O3
上述标准是否合规,或是否使用扩展名?
答案 0 :(得分:11)
声明的枚举,即使你没有指定枚举器(标准称之为 opaque-enum-declaration )是一个完整的类型,所以它可以在任何地方使用。
为完整起见,请参阅§7.2第3段的引用:
opaque-enum-declaration 是枚举的重新声明 在当前范围或新枚举的声明中。 [注意: An 由 opaque-enum-declaration 声明的枚举已修复 底层类型,是一个完整的类型。枚举器列表可以是 在稍后的重新声明中提供了enum-specifier。 -end note ]
opaque-enum-declaration 的语法,来自同一段§7.2的第一段:
opaque-enum-declaration:
enum-key attribute-specifier-seq opt identifier enum-base opt
;