省略抛出的非空函数模板的 return 语句是否有效
Is it valid to omit the return statement of a non-void function template that throw
我正在使用列出的资源 here 学习 C++。特别是,我阅读了有关异常的信息,想知道省略如下所示抛出的非空 function/function 模板的 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/ill-formed.
are example 1 and example 2 valid?
是的。
Or we have UB/ill-formed.
没有
Is it valid to omit the return statement of a non-void function/function template that throw
是的。 non-void returning 函数必须抛出或 return 一个值。它不能同时进行。
So is int func(){ int x = 4; throw; return x;}
valid
有效。但它从来没有 return 值。 throw 之后的所有内容都是死代码。
我正在使用列出的资源 here 学习 C++。特别是,我阅读了有关异常的信息,想知道省略如下所示抛出的非空 function/function 模板的 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/ill-formed.
are example 1 and example 2 valid?
是的。
Or we have UB/ill-formed.
没有
Is it valid to omit the return statement of a non-void function/function template that throw
是的。 non-void returning 函数必须抛出或 return 一个值。它不能同时进行。
So is
int func(){ int x = 4; throw; return x;}
valid
有效。但它从来没有 return 值。 throw 之后的所有内容都是死代码。