我正在使用此處列出的資源學習 C 。特別是,我閱讀了有關例外的內容,并想知道省略拋出如下所示的非 void 函式/函式模板的 return 陳述句是否有效:
示例 1
#include <iostream>
//this function template does not have a return statement
template<typename T>
T func()
{
int x = 4;
std::cout<<"x: "<<x<<std::endl;
throw;
}
int main()
{
func<double>();
}
示例 2
#include <iostream>
//this function does not have a return statement
int func()
{
int x = 4;
std::cout<<"x: "<<x<<std::endl;
throw;
}
int main()
{
func();
}
我的問題是示例 1 和示例 2 是否有效?或者我們有 UB/格式錯誤。
uj5u.com熱心網友回復:
示例 1 和示例 2 是否有效?
是的。
或者我們有 UB/格式錯誤。
不。
省略拋出的非void函式/函式模板的return陳述句是否有效
是的。非 void 回傳函式必須拋出或回傳一個值。它不能同時做到這兩點。
所以是
int func(){ int x = 4; throw; return x;}有效的
這是有效的。但它從不回傳值。拋出后的所有內容都是死代碼。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/442440.html
