【发布时间】:2012-01-18 13:47:14
【问题描述】:
向前传递声明的结构或类时,必须通过引用或指针将其传递给函数。
但是,前向声明的枚举可以做什么?它是否也必须通过引用或指针传递?或者,可以带值传递吗?
下一个示例使用 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
是否符合上述标准,或者是否使用了扩展?
【问题讨论】:
-
您的代码同样适用于前向声明的类:
struct A; void foo(A); struct A {}; void foo(A) {}是有效代码。见When to use forward declaration。 -
在定义
E之前,您可以尝试define(而不是declare)foo。 -
@LucTouraille 第一个链接说明了一切(谢谢)。对于第二件事,我知道我会得到
error: 'V1' is not a member of 'E'错误的原因,但这会编译得很好:void foo( const E e ) { std::cout << (int)e<<std::endl; }如果你在定义枚举之前输入它。
标签: c++ enums c++11 forward-declaration