根據C++標準函數不返回值產生未定義的行爲。對於沒有構造函數的C來說,這是合理的,但這就是爲什麼C++ 11/14/17中沒有解決這個問題?爲什麼C++在未指定return語句時未默認構造返回值?
如果在執行過程中沒有返回語句,我認爲默認構造返回值是很自然的。它將使代碼更清潔和更安全,而不會破壞與舊的C++和C代碼的兼容性。
比較:
optional<int> foo() try {
return some_complex_computation();
} catch (err1& e) {
LOG << e;
return none;
} catch (err2& e) {
LOG << e;
return none;
} catch (err3& e) {
LOG << e;
// oops, undefined behaviour
}
,只是
optional<int> foo() try {
return some_complex_computation();
} catch (err1& e) {
LOG << e;
} catch (err2& e) {
LOG << e;
} catch (err3& e) {
LOG << e;
}
有多難鍵入'返回{};'你需要一個語言功能? – Barry
任何體面的編譯器都會對此發出警告,調高警告級別和/或實際開始讀取警告。 – Praetorian
男人,我真的很討厭看着別人的代碼,用長長的函數來填充返回語句:( –