-
-
[分享]《探索现代化C++》泛读笔记摘要5
-
发表于: 2022-9-11 09:41 4689
-
《探索现代化C++》泛读笔记摘要5
Chapter 2 类
析构函数
RAII是一种编程范式。想法就是利用对象的构造函数和析构函数实现资源的自动处理。
方法生成总结
编译器会隐式生成C++的六种方法:
- 默认构造函数
- 拷贝构造函数
- 移动构造函数
- 拷贝赋值
- 移动赋值
- 析构函数
C++11 提供了两个关键字,一个是default,一个是delete来控制这些函数的生成。
1 2 3 4 5 6 | class complex { public: complex (const complex &) = delete; complex & operator = (const complex &) = default; }; |
Chapter 3 通用编程
通用编程是一种编程范式,旨在实现最大的适用性,同时提供
正确性。它主要使用的工具是模板。
模板用以创建通用函数和通用类,避免为每一种数据类型重写一份代码。
函数模板
参数类型推导
值参数
下面这个模板函数接受所有参数,只要它们的类型可以拷贝或在rvalues的情况下移动。
1 2 3 4 5 6 7 8 9 10 11 12 13 | template<typename TPara> void f1(TPara p) {} int main() { int i = 0 ; int & j = i; const int & k = i; f1( 3 ); f1(i); f1(j); f1(k); } |
左值引用参数
1 2 3 4 5 | template<typename TPara> void f2(const TPara& p) {} template<typename TPara> void f3(TPara& p) {} |
C++11 转发引用
1 2 3 4 5 6 | template<typename TPara> void f4(TPara&& p) {} f4( 3 ); f4(move(i)); f4(move(up)); |
std::move 可将左值转换为右值。
C++11 完美转发
当我们希望将引用参数传递给另一个函数时,我们想让左值引用传递为左值,右值引用传递为右值,那么就要用到完美转发。std::forward是一个条件转换。
1 2 3 4 5 | template<typename TPara> void f5(TPara&& p) { f4(forward<TPara>(p)); } |
C++14 自动推导返回值类型
1 2 3 4 5 | template <typename T,typename U> auto max (T a, U b) { return a>b?a:b; } |
C++20 简化模板参数
1 2 3 4 5 | / / 与上面相比少了第一行 auto max (auto a, auto b) { return a>b:a:b; } |
赞赏
他的文章
- 定位Windows分页结构内存区域 6916
- [原创]2022年,工业级EDR绕过蓝图 28273
- [分享]《探索现代化C++》泛读笔记摘要20 完! 7311
- [分享]《探索现代化C++》泛读笔记摘要19 7563
- [原创]摘微过滤驱动回调的研究-续 10163
看原图
赞赏
雪币:
留言: