【发布时间】:2020-05-10 09:04:11
【问题描述】:
在 C++ concurrency in Action 第 45 页我有这段代码
#include <exception>
#include <memory>
struct empty_stack: std::exception
{
const char* what() const throw(); //<--- what does this mean?
}
谁能告诉我这是什么意思?
这个empty_stack异常被另一个函数抛出,如果栈是空的,比如
if(data.empty()) throw empty_stack();
但里面的线是什么意思?
编辑:
有人发布(但被删除了!想知道为什么)这个link 谢谢!
【问题讨论】:
-
它声明了返回异常描述的方法
what()。您是指整行还是其中的某个特定部分? -
整行。那么
what只是一个方法的名称? (ergo 可以是什么?) -
@KansaiRobot
std::exception提供了一个虚方法what,所以不行,你必须使用这个特定的名称来覆盖它。 -
@Evg --
throw()与noexcept不太一样。见here。不同之处在于,如果函数抛出异常,如果它被标记为throw(),您将获得对std::unexpected()的调用;如果它被标记为noexcept,您将接到std::terminate()的电话。std::unexpected()默认调用std::terminate(),但它是可替换的,所以你不必终止。