[英]Conditional branches
為什么這段代碼會編譯?
#include <iostream>
int foo(int x)
{
if(x == 10)
return x*10;
}
int main()
{
int a;
std::cin>>a;
std::cout<<foo(a)<<'\n';
}
編譯器不應該給我一個錯誤,如“並非所有代碼路徑返回值”? 當x不等於10時,會發生什么/返回我的函數?
結果是未定義的,因此編譯器可以自由選擇 - 您可能會得到恰好位於調用者期望結果的適當堆棧地址的情況。 激活編譯器警告,編譯器將通知您有關遺漏的信息。
在這種情況下,編譯器不需要給出錯誤。 許多人會,有些人只會發出警告。 有些人顯然不會注意到。
這是因為您的代碼可能會在此函數之外確保條件始終為true。 因此,它不一定是壞的(雖然它幾乎總是,這就是大多數編譯器至少會發出警告的原因)。
規范將聲明退出應返回值但未返回值的函數的結果是未定義的行為。 可以返回值。 或者程序可能崩潰。 或任何可能發生的事情 這是未定義的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.