对齐:一个结构体中的所有元素所占的空间大小都会按其中最大的类型所占的空间大小,不到的部分空字节填充。
alignof()获取某一个类型的对齐大小
alignas(int)让某一个类型的大小对齐int大小,写在变量名前
static_assert(bool,string/c_str)
编译时assert
变量模板
就是将一个变量的类型变为模板
template<typename T>
T val;
//使用的时候
val<某个type>=...
泛型lambda
支持模板化
interger_sequence<T,number1,number2,…>
一个类型为T,值为number的整数序列,一般用于模板元编程
make_interger_sequence<T,number>生成一个0-19的interger_sequence
make_interger_index<number>类型为size_t
std::exchange(obj,new_value)
以new_value替换obj的值并返回obj的旧值
std::quoted(字符串),给暂时的字符串加上””,可以用来简化生成JSON、XML等带引号的文本格式的代码。
std::quoted(in, delim, escape),delim是要加上的字符,而如果原字符串中有delim字符,那么在前面加上escape以实现转义。
结构化绑定(都需要大小一致)
if中初始化:if(初始化;条件){}初始化的变量的生命周期是整个if
复制消除
有的时候编译器会省略一些复制构造和移动构造直接使用原本的变量来作为新的变量来省去这一开销。
而c++17中引入了一部分的强制复制消除的规则,原本都是非强制的。
折叠表达式
通过折叠表达式来原地展开来简化形参包的使用。
模板类型(c++20还有非类型的)推导,即有些能推导的地方就不用写<>了
非类型模板参数的类型也可以用auto来推导了
using可以一次性using多个变量了,用,隔开。
属性说明符列表可以将命名空间提前。
[[fallthrough]]
在一个case结束时不break不会警告
std::any,一个可以为任何类型的类型,但是要获取对应值的时候要进行any_cast转为特定的类型后才能访问。
charconv:from_chars(char*,char*,数字&,chars_format)和to_chars(char*,char*,数字,char_format),from_chars返回值通过引用传递,提供了更好的字符串和数字转换(可以调整格式)
excution:提供seq顺序,par按顺序并行,par_unseq乱序并行,unseq乱序四种方法。一般用于for_each(策略,iter,iter,函数),表示以什么样的策略对iter范围的数据执行这个函数。
filesystem:提供filesystem和path来处理文件系统和路径。