c++++中替代异常规范throw()的机制是noexcept。void foo() throw()表示函数不抛异常或仅抛指定类型异常,但语法繁琐且效率低;而从c++11开始引入的noexcept语义更清晰、性能更好,其基本写法为void bar() noexcept,也可结合条件表达式使用,如template<typename t> void func() noexcept(noexcept(t().swap(t())));建议将析构函数、移动操作等标记为noexcept以提升性能和明确意图;此外,noexcept在编译期处理,若函数内抛异常会导致程序终止,因此需确保其确实不会抛出异常。

C++异常规范语法在现代C++中已经不推荐使用了,取而代之的是更清晰、更安全的
noexcept
throw()

throw()
在 C++11 之前,如果你想说明一个函数不会抛出异常,可以这样写:

void foo() throw();
这表示
foo()
throw(std::bad_alloc)
立即学习“C++免费学习笔记(深入)”;
noexcept
从 C++11 开始,标准委员会引入了
noexcept

noexcept
基本写法是这样的:
void bar() noexcept; // 表示该函数不抛异常
如果你只想在某些条件下才保证不抛异常,还可以加表达式:
template <typename T>
void func() noexcept(noexcept(T().swap(T()))) {
// 如果 T 的 swap 不抛异常,那么整个函数也不抛
}这段稍微复杂点,但用起来很灵活,特别是在泛型编程中特别有用。
noexcept
noexcept
noexcept
noexcept
noexcept
举个例子:
class MyClass {
public:
~MyClass() noexcept {} // 明确说明不会抛异常
};noexcept
throw()
noexcept
std::terminate()
#if __cplusplus >= 201103L # define MY_NOTHROW noexcept #else # define MY_NOTHROW throw() #endif
基本上就这些。说到底,
noexcept
throw()
noexcept
以上就是C++异常规范语法还适用吗 noexcept替代throw()的现代用法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号