首页
社区
课程
招聘
[分享]《探索现代化C++》泛读笔记摘要5
发表于: 2022-9-11 09:41 4689

[分享]《探索现代化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;
}

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//