常量throw是什么意思? 在动作页面45的C++并发中,我有这个代码 #include <exception> #include <memory> struct empty_stack: std::exception { const char* what() const throw(); //<--- what does this mean? } #包括 #包括 结构空_堆栈:std::exception { 常量字符*what()常量throw()//

常量throw是什么意思? 在动作页面45的C++并发中,我有这个代码 #include <exception> #include <memory> struct empty_stack: std::exception { const char* what() const throw(); //<--- what does this mean? } #包括 #包括 结构空_堆栈:std::exception { 常量字符*what()常量throw()//,c++,c++11,C++,C++11,它是一个名为what的const方法,不接受任何参数,返回const char*,并指定不引发异常 注意:在C++11中不推荐使用,在C++17/20中删除。我引用了以下内容: 如果函数抛出异常规范中未列出的类型的异常,则调用函数std::unexpected。默认函数调用std::terminate,但可以由用户提供的函数替换(通过std::set\u unexpected)它可以调用std::terminate或引发异常。如果异常规范接受从std::unexpected引发的异常,堆栈展开将

它是一个名为
what
const
方法,不接受任何参数,返回
const char*
,并指定不引发异常

注意:在C++11中不推荐使用,在C++17/20中删除。我引用了以下内容:

如果函数抛出异常规范中未列出的类型的异常,则调用函数
std::unexpected
。默认函数调用
std::terminate
,但可以由用户提供的函数替换(通过
std::set\u unexpected
)它可以调用
std::terminate
或引发异常。如果异常规范接受从
std::unexpected
引发的异常,堆栈展开将照常继续。如果不接受,但异常规范允许
std::bad_exception
引发
std::bad_exception
。否则,调用了
std::terminate

它是一个名为
what
const
方法,不接受任何参数,返回
const char*
,并指定不引发异常

注意:在C++11中不推荐使用,在C++17/20中删除。我引用了以下内容:

如果函数抛出异常规范中未列出的类型的异常,则调用函数
std::unexpected
。默认函数调用
std::terminate
,但可以由用户提供的函数替换(通过
std::set\u unexpected
)它可以调用
std::terminate
或引发异常。如果异常规范接受从
std::unexpected
引发的异常,堆栈展开将照常继续。如果不接受,但异常规范允许
std::bad_exception
引发
std::bad_exception
。否则,调用了
std::terminate


。它声明了返回异常描述的方法。你是指整行还是它的某个特定部分?整行。那么
什么
只是一个方法的名称?(ergo可以是任何东西?)@KansaiRobot
std::exception
提供了一个虚拟方法
what
,因此不,您必须使用此特定名称来覆盖它。@Evg--
throw()
noexcept
不完全相同。请参阅。区别在于如果函数引发异常,如果它被标记为
throw()
您将获得对
std::unexpected()
的调用;如果标记为
noexcept
您将获得对
std::terminate()
的调用,默认情况下调用
std::unexpected()
,但它是可替换的,因此您不必终止..它声明了返回异常描述的方法。您是指整行还是它的某个特定部分?整行。所以
什么
只是一个方法的名称?(ergo可以是任何东西?)@KansaiRobot
std::exception
提供了一个虚拟方法
what
,因此不,您必须使用此特定名称来覆盖它。@Evg--
throw()
noexcept
不完全相同。请参阅。区别在于如果函数引发异常,如果它被标记为
throw()
您将得到对
std::unexpected()
的调用;如果它被标记为
noexcept
您将得到对
std::terminate()
的调用,默认情况下调用
std::unexpected()
,但它是可替换的,因此您不必终止。
 const char* what() const throw();
 |-> return type
             |-> name of the method
                 |-> parameter
                    |-> it is a const method
                          |-> exception specification