当传递前向声明的结构体或类时,必须通过引用或指针将其传递给函数。
但是,前向声明的枚举应该如何处理?它也必须通过引用或指针传递吗?还是可以通过值传递?
下面的示例在使用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) {}
这是有效的代码。请参阅何时使用前向声明。 - Luc TourailleE
之前定义(而不是声明)foo
。 - Luc Touraillevoid foo(const E e) {std :: cout <<(int)e << std :: endl;}
。 - BЈовић