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