Skip to content

Commit f6f29eb

Browse files
committed
add note of chapter 34
1 parent aca3298 commit f6f29eb

File tree

1 file changed

+13
-0
lines changed

1 file changed

+13
-0
lines changed

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ date: 2024-10-01
4848
- [属性说明符和标准属性(C++11~C++20)](#属性说明符和标准属性c11c20)
4949
- [新增预处理器和宏(C++17 C++20)](#新增预处理器和宏c17-c20)
5050
- [协程(C++20)](#协程c20)
51+
- [基础特性的其他优化(C++11~C++20)](#基础特性的其他优化c11c20)
5152

5253
## 新基础类型(C++11~C++20)
5354

@@ -588,4 +589,16 @@ C++11引入可变参数宏`__VA_ARGS__`。C++20引入`__VA_OPT__`令可变参数
588589

589590
应该尽量将协程和future和generator一起使用。协程并不会自动执行异步操作。
590591

592+
// TODO:具体实现未看
591593

594+
## 基础特性的其他优化(C++11~C++20)
595+
596+
C++11支持显示自定义类型转换运算符,但是会有意想不到的结果。单参数的构造函数也会造成类型的隐式转换,可以通过添加前缀`explicit`来避免这个问题。对于布尔转换,在某些期待上下文为bool类型的语境中,可以隐式进行转换,即使已经被声明为显示。
597+
598+
`std::launder()`在C++17引入。C++标准规定:如果新的对象在已被某个对象占用的内存上进行构建,那么原始对象的指针、引用以及对象名都会自动转向新的对象,除非对象是一个常量类型或对象中有常量数据成员或者引用类型。std::launder可以防止编译器追踪到数据的来源以阻止编译器对数据的优化。
599+
600+
返回值优化。但实际上的返回值优化是很容易失效的。传引用和移动语义都可以在一定程度上取代返回值优化。
601+
602+
C++20:按值进行默认比较。支持new表达式推导数组长度。
603+
604+
// TODO:一些C++20小的新特性未看

0 commit comments

Comments
 (0)