因為行刑的時候,dis?小於等於900的值前面已經返回了,這裏必須大於900,所以不用寫if (dis > 900)。
編譯器將測試所有返回的路徑。如果任何路徑沒有返回值,編譯器會警告妳。在妳的例子中,if (dis > 900)返回4,編譯器從語法和邏輯上推斷,下面壹定有else的返回路徑,所以邏輯會完整,但是編譯器沒有找到else,所以警告。妳可能會說else的dis值是“小於或等於”900,這個值在前面的部分已經返回了。這裏加else沒有任何意義。是的,即使添加了else,程序也無法運行到else,但編譯器只需要邏輯路徑的完整性,而“值”是否經過處理,編譯器並不關心。例如,我將其中壹個if(dis > 100 & amp;& ampdis & lt= 225),改為函數:
如果?(dis?& lt=?25?& amp& amp?dis?& lt=?100)
回歸?9;
如果?(foo?(dis))//?在這裏修改它
回歸?8;
如果?(dis?& gt?225?& amp& amp?dis?& lt=?400)
回歸?7;
...?
-
int?foo?(int?dis)
{
回歸?(dis?& gt?100?& amp& amp?dis?& lt=?225)?1?:?0;
}從修改後的if序列來看,編譯器根本無法判斷foo函數裏做了什麽,所以到了if (dis > 900)的時候,100的值到225?如果沒有別的,編譯返回什麽?
所以關於返回路徑,編譯器不能幫妳做什麽,只有妳能做,而且妳知道這裏的dis不能小於等於900,所以妳要做的就是把if (dis > 900)刪除。