std::uint8_t一般是unsigned char的别名,打印std::uint8_t*时会以C字符串(char*)的方式打印,unexpected

<bit>提供了对unsigned的位运算支持。

Hacker’s Delight

float加减法,只在数值倍数相差不超过1.6e7时有效

C字符串在cpp中类型是const char[]

在构造函数体内“初始化”成员,实际上成员已经被默认初始化过了,我们进行的是operator=

默认构造

T a/new T

如果有默认构造函数,调用它

如果没有,内存是随机值

int没有默认构造函数

值初始化

T a()/T a{}/new T()/new T{}

相较于默认初始化,对其他情况进行零初始化

直接初始化

T a(...)/T(...)/new T(...)/T a{xx} non-class type

复制初始化

T a = xx/T a[] = {}

non-explicit

直接列表初始化

T a{...}/T{...}/new T{...}

复制列表初始化

T a = {...}/func({...})/return {...}/[{...}]

non-explicit

auto和initializer list

private继承表示has-a,不如组合

非静态成员函数中使用lambda,使用this引用捕获所有成员变量,使用*this复制捕获

folly认为gcc的扩容系数2是对cache不友好的

设想当我们不断扩容时,扩容系数2是无法重用之前释放的空间的,需求永远大于之前所有释放空间之和

但1.5允许

const std::span<T>不能传播const,内部元素可变。

原因是这没有意义,你可以轻易将复制出一个不带const的std::span<T>,这个新span观察同一段元素。

对span使用不可变元素应当使用std::span<const T>

应当像理解指针的const修饰一样理解std::span

https://stackoverflow.com/questions/56886440/does-span-propagate-const