在以下 C++ 代码中:
typedef enum { a, b, c } Test;
int foo(Test test) {
switch (test) {
case a: return 0;
case b: return 1;
case c: return 0;
}
}
使用 编译时会发出警告-Wall
,表示控件到达非 void 函数的末尾。为什么?
编辑
说test
示例中的变量可以包含任何值通常是不正确的。
foo(12354)
不编译:
> test.cpp:15:14: 错误:从 'int' 到 'Test' 的无效转换 > test.cpp:15:14: 错误:初始化 'int foo(Test)' 的参数 1
因为 12354 不是一个有效值Test
(尽管它在纯C中确实有效,但它不在 C++ 中)。
您确实可以将任意整数常量显式转换为枚举类型,但这不被认为是未定义的行为吗?