编译阶段,g++报告:
warning: dynamic exception specifications are deprecated in C++11 [-Wdeprecated]
或者
error: ISO C++1z does not allow dynamic exception specifications
原因是出在类似以下形式的语句中:
void Func() throw(int);
这条语句中的throw(int)
指明了该函数可能抛出int类型的异常。可是C++11已经不建议这样做,而从C++17开始更是禁止这样的声明。现在的正确写法是:
# 可抛出任意异常
void Func();
# 从C++17开始,以下所有写法等效,含义是该函数不会抛出异常
void Func() noexcept;
void Func() noexcept(true);
void Func() throw(); # 在C++11到C++17之间,这种写法在性能和稳定性上差于前两种写法
手动声明noexcept的目的在于帮助编译器优化代码,但存在风险。当一个被声明为noexcept的函数出现了异常,程序会无视任何情况直接退出。因此目前而言,除非您相当确信这段代码不会出现异常,noexcept声明是不推荐使用的。
太给力了~