有人可以给我一个例子,我们真的需要枚举作为函数中的参数吗?在C/C++中作为函数的参数枚举
回答
不需要枚举,但它们使软件更具可读性。例如:
void write(const std::string&, bool flush);
现在主叫方:
write("Hello World", true);
如果枚举已经使用,它变得更清楚什么样的第二个参数是指主叫方:
enum flush_type { flush, no_flush };
void write(const std::string&, flush_type flush);
并再次呼叫方:
write("Hello World", flush);
不是,枚举的使用限制了你可以作为函数参数传递给枚举值。 – juanchopanza
@juanchopanza:没错。该功能对未预料到的价值有什么作用?枚举有助于阐明函数的设计目的。 –
@PontusGagge,并可能强制编译器错误,如我的答案中的示例。 – juanchopanza
除了使代码更清晰,在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
}
对于C++而言,不是C的,它不强制对枚举类型进行类型检查。然而,C编译器可能会发出警告,但可能不会如此处所述:http://stackoverflow.com/questions/8597426/enum-type-check-in-c-gcc – Clifford
@Clifford感谢您指出了这一点。我没有意识到问题是关于两种不同的语言,这是无稽之谈。 – juanchopanza
“废话”可能有点强烈 - 语言的语法有相同的语法并且可以互操作,但对于相同的语法假设相同的语义可能是天真的,但并非不合理 - 它们并不相同。 – Clifford
- 1. 使用枚举作为函数参数
- 2. C#枚举作为函数参数?
- 3. 作为Dynamics AX中的参数枚举
- 4. 枚举作为C#函数中的参数
- 5. 是否可以将非枚举值作为枚举函数参数传递?
- 6. 枚举数组作为参数c + +
- 7. 作为参数的随机枚举
- 8. 多值DWORD枚举作为一个函数参数C++
- 9. VB .NET,传递枚举值作为函数参数
- 10. C++函数接收枚举作为其参数之一
- 11. 如何将枚举作为参数传递给函数?
- 12. 将枚举值作为参数传递
- 13. 如何通过枚举作为参数
- 14. 通过枚举循环作为参数
- 15. 传递枚举作为参数
- 16. 使用枚举作为参数
- 17. C++通过枚举作为参数
- 18. 枚举函数
- 19. 枚举函数?
- 20. 枚举名称作为函数
- 21. 枚举VS字符串作为函数
- 22. 传递枚举作为参数 - 作为字典(的字符串,枚举)(VB 2012)
- 23. 工厂函数以枚举参数
- 24. Angular 2将枚举枚举为HTML中的组件函数
- 25. 如何在C#中将枚举作为参数传递给C函数
- 26. Powershell枚举参数
- 27. 为什么枚举不能用作此向量构造函数中的参数?
- 28. Swift枚举函数
- 29. 在Swift枚举函数
- 30. 使用Swift枚举来减少函数中的参数数量
您如何区分“需要”和“真正需要”? –
我想你可以通过问一个不同的问题来帮助自己。使用枚举作为函数参数的原因与在代码中的其他任何地方使用枚举的原因相同。 –
“真需要”太强大;你永远不会这样做,但使用它们可以使你的代码更清晰,更容易维护,并且更少出错(尤其是在C++中) – Clifford