0%

span用于表示一段连续内存的范围。它提供了对底层数据的非拥有式引用,并支持类似数组的操作。

最大的作用是可以用于代替数组作为函数参数,把数组作参数时(非引用)会退化为指针,如果把数组当参数时,还得传递数组的长度, 这样就必须得两个参数了,比较麻烦。传递span就只需要一个参数,它代码更简单,更安全,不会越界。

阅读全文 »

optional可以处理那些可能为空的情况,尤其是作为函数返回值时。比如:一个函数返回值是int时,有时候会将-1作为异常值返回,但是有时候-1可能也是有效值,就又需要想异常值,这个时候optional就起到作用了。

阅读全文 »

modern C++中提到使用考虑使用置入代替插入,个人理解就是使用考虑使用emplace_back代替push_back操作,那么这两者之间究竟有什么区别,想探究一下

阅读全文 »

C++中的std::forward函数是一个非常有用的工具,主要用于在泛型编程中完美转发(perfect forwarding)参数。在C++中,完美转发是指将函数模板中接收到的参数以原始形式(左值或右值)转发给另一个函数,保持参数的值类别(左值或右值)不变。

阅读全文 »

std::move执行到右值的无条件的转换,但就自身而言,它不移动任何东西

内部的实现类似这样:

1
2
3
4
5
6
template<typename T>
typename remove_reference<T>::type&& move(T&& param)
{
using ReturnType = typename remove_reference<T>::type&&;
return static_cast<ReturnType>(param);
}
阅读全文 »

C++中已经基本不推荐使用裸指针(手动进行newdelete),基本上都是使用智能指针。所以作为C++程序员必须学会智能指针的使用:auto_ptr(已废弃不建议使用)、unique_ptrshare_ptrweak_ptr

画板

阅读全文 »

C++中存在enumenum class两种,现代C++更加建议使用enum class这种。理由主要有三点:

  1. enum class作用域更小,可以减少命名空间污染。enum定义后,其中的枚举类作用域是整个enum所在空间,可能对其他部分产生影响。比如

    阅读全文 »

C++类中的特殊成员函数

C++类中存在一些特殊的成员函数,编译器通常会自动为我们生成这些函数。然而,在某些情况下,编译器可能不会自动创建这些函数,因此我们需要了解这些函数的生成规则,并做好记录。

画板

阅读全文 »

decltype类型推导

decltype可以推导出变量或者表达式的类型,比如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>

int main() {
int x = 5;
const int& y = x;

// 使用decltype获取变量的类型
decltype(x) a = 10; // a的类型为int
decltype(y) b = x; // b的类型为const int&

// 使用decltype获取表达式的类型
decltype(x + a) c = x + a; // c的类型为int

std::cout << "a: " << a << std::endl;
std::cout << "b: " << b << std::endl;
std::cout << "c: " << c << std::endl;

return 0;
}

阅读全文 »