Skip to content

Commit bc88f23

Browse files
committed
add note of charpter 22
1 parent d1304b1 commit bc88f23

File tree

1 file changed

+10
-0
lines changed

1 file changed

+10
-0
lines changed

_posts/2024-10-01-现代C++语言核心特性解析.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,4 +387,14 @@ C++17引入了结构化绑定,将一个或多个名称绑定到初始化对象
387387

388388
移动构造函数中包含着一个严重的异常陷阱。移动语义会破坏原始对象,因此移动构造函数中途发生异常就会导致原始对象不可用。因此引入noexcept关键字。用于说明函数是否会抛出异常,编译器可以根据声明优化代码,若是抛出异常,则会被调用std::terminate去结束程序的生命周期。noexcept还接受一个返回布尔值的常量表达式。noexcept还可以作为运算符。
389389

390+
对于移动构造函数可以先判断目标类型的构造函数是否有可能抛出异常,如果没有排除异常的可能,那么函数可以进行移动操作,否则将使用传统的复制操作。
391+
392+
使用noexcept和throw()声明的函数对于noexcept运算符来说是一样的。
393+
394+
C++11标准规定以下函数默认带有noexcept声明:
395+
396+
- 默认构造函数、默认复制构造函数、默认赋值构造函数、默认移动构造函数和默认移动赋值函数。
397+
- 类型的析构函数以及delete运算符默认嗲有noexcept声明。
398+
399+
C++17将异常规范引入了类型系统。
390400

0 commit comments

Comments
 (0)