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