We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
1 parent d1304b1 commit bc88f23Copy full SHA for bc88f23
_posts/2024-10-01-现代C++语言核心特性解析.md
@@ -387,4 +387,14 @@ C++17引入了结构化绑定,将一个或多个名称绑定到初始化对象
387
388
移动构造函数中包含着一个严重的异常陷阱。移动语义会破坏原始对象,因此移动构造函数中途发生异常就会导致原始对象不可用。因此引入noexcept关键字。用于说明函数是否会抛出异常,编译器可以根据声明优化代码,若是抛出异常,则会被调用std::terminate去结束程序的生命周期。noexcept还接受一个返回布尔值的常量表达式。noexcept还可以作为运算符。
389
390
+对于移动构造函数可以先判断目标类型的构造函数是否有可能抛出异常,如果没有排除异常的可能,那么函数可以进行移动操作,否则将使用传统的复制操作。
391
+
392
+使用noexcept和throw()声明的函数对于noexcept运算符来说是一样的。
393
394
+C++11标准规定以下函数默认带有noexcept声明:
395
396
+- 默认构造函数、默认复制构造函数、默认赋值构造函数、默认移动构造函数和默认移动赋值函数。
397
+- 类型的析构函数以及delete运算符默认嗲有noexcept声明。
398
399
+C++17将异常规范引入了类型系统。
400
0 commit comments