-
-
[分享]《探索现代化C++》泛读笔记摘要5
-
发表于: 2022-9-11 09:41 4844
-
《探索现代化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分页结构内存区域 7582
- [原创]2022年,工业级EDR绕过蓝图 29583
- [分享]《探索现代化C++》泛读笔记摘要20 完! 7596
- [分享]《探索现代化C++》泛读笔记摘要19 7856
- [原创]摘微过滤驱动回调的研究-续 10706
赞赏
雪币:
留言: