对于此代码:
enum class Colors { Red, Green, Blue };
int fun(Colors color)
{
switch (color)
{
case Colors::Red: return 0;
case Colors::Blue: return 1;
case Colors::Green: return 2;
}
}
我的编译器向我抛出了这个错误:
warning: control reaches end of non-void function [-Wreturn-type]
我知道在函数中没有return语句是未定义的行为,但是对于所有控制路径没有return语句是未定义的行为吗?提前谢谢。
答案 0 :(得分:0)
原因是您使用不正确的值调用了fun
函数,而不是红色,蓝色或绿色。您可以将代码更改为
int fun(Colors color)
{
switch (color)
{
case Colors::Red: return 0;
case Colors::Blue: return 1;
case Colors::Green: return 2;
default: return -1; // Unknown color here!
}
}
答案 1 :(得分:0)
在您的情况下,fun
的返回值不是void
,所以,是的,它是未定义的行为。
C ++ 11 6.6.3
return
语句[...]离开函数末尾相当于没有值的返回;这会导致值返回函数中的未定义行为。
答案 2 :(得分:-1)
如果函数返回return
,则在函数中没有void
语句是可以的。但是,对于函数 not 返回void
,它始终是未定义的行为,因为没有来自任何执行路径的有效返回值。
因此,在您的情况下,您需要return
之后的值为switch
。
请注意,如果您在default
声明中列出所有可能的案例,则不需要switch
个案例。