enum MyEnum
{
A,
B,
}
MyEnum Foo(int i)
{
MyEnum mx;
switch(i)
{
case 1:
{
mx = A;
}break;
case 2:
{
mx = B;
}break;
default:
{
throw std::exception("ERROR");
}
}
}
int Main()
{
MyEnum myEnum = Foo(1);
return 0;
}
如果Foo()中沒有'return',則此代碼可以在VS2010中編譯和運行。它是編譯器錯誤嗎?爲什麼使用switch語句的函數不需要返回
VS2010 screenshot,以確認它可以運行
*警告:函數中沒有返回語句返回非void [-Wreturn-type] * http://liveworkspace.org/code/3898ddcf0e5b69eb23763ddf2ba56f51 – chris
不,這是您的代碼和開發實踐中的一個錯誤,無法編譯在最高的警戒級別。 –
感謝您的所有評論, 根本原因是** default ** case引發異常,然後編譯器將其視爲有效的退出點。 如果我在** switch case **之後添加一些代碼,編譯器報告'警告C4715:'Foo':並非所有的控制路徑都返回一個值'。 如果我刪除**默認**,或不返回或拋出**默認**,編譯器報告錯誤C4716:'Foo':必須返回一個值'。 –