C++ 枚举作为C/C中函数的参数++

C++ 枚举作为C/C中函数的参数++,c++,c,C++,C,有谁能给我一个例子,我们真的需要一个枚举作为函数中的参数吗?没有必要使用枚举,但它们使软件更具可读性。例如: void write( const std::string&, bool flush ); 现在是主叫方: write( "Hello World", true ); write( "Hello World", flush ); 如果使用了enum,则在调用端,第二个参数的含义会更清楚: enum flush_type { flush, no_flush }; void w

有谁能给我一个例子,我们真的需要一个枚举作为函数中的参数吗?

没有必要使用枚举,但它们使软件更具可读性。例如:

void write( const std::string&, bool flush );
现在是主叫方:

write( "Hello World", true );
write( "Hello World", flush );
如果使用了enum,则在调用端,第二个参数的含义会更清楚:

enum flush_type { flush, no_flush };
void write( const std::string&, flush_type flush );
还有主叫方:

write( "Hello World", true );
write( "Hello World", flush );

<>除了使代码更清晰,在C++中,它强制编译时,函数只与一组可能值中的一个一起工作:

namespace Foo
{
enum Bar { A, B, C };

void foo(Bar b) { .... }
void foo2(int i) { /* only ints between 0 and 5 make sense */ }
}


int main()
{
  Foo::Bar b = Foo::A;
  Foo::foo(b);   // OK
  Foo::foo(245); // Compile-time error!
  Foo::foo2(6);  // Compiles, triggering some run-time error or UB 
}

函数setColor in button需要获取参数color,应该是enum

你如何区分需要和真正需要?我认为你最好问一个不同的问题来帮助自己。使用枚举作为函数参数的原因与在代码中的任何其他位置使用枚举的原因相同。真的需要太强烈;您永远不会这样做,但使用它们可以使代码更清晰、更易于维护,并且更不容易出现错误,特别是在C++中。不完全是这样,枚举的使用限制了您可以将函数参数传递给枚举的值。@juanchopanza:没错。函数应该如何处理意外值?枚举有助于阐明函数的设计。@ PontusGagge,可能会强制编译器错误,如在我的回答中的例子。@ JuangopaZa:只强制C++中的错误。注意,每个枚举都等同C++中的机器语言真值,但不适用于不强制枚举枚举类型的C。然而,C编译器可能会发出警告,但可能不会像这里描述的那样发出警告:@Clifford感谢您指出这一点。我没有意识到这个问题是关于两种不同的语言的,这是胡说八道。胡说八道可能有点强——这两种语言共享一些相同的语法,并且可以互操作,假设相同的语法具有相同的语义可能是幼稚的,但也不是不合理的——问题是它们不相同。回答得好。非常感谢。