1 std::string_view类
string_view基本上就是const string&的简单替代品,但不会产生开销。他不复制字符串。
string_view添加了remove_prefix(size_t)和remove_suffix(size_t)方法,前者将起始指针给定的偏移量来收缩字符串,后者则将结尾指针倒退给定的偏移量来收缩字符串。
string_view.data();
string{string_view};
只能以这种方式接受const string&。
返回字符串的函数应返回const std::string&或string,但不应返回string_view,有返回的string_view无效的风险,例如当它指向的字符串需要重新分配时。
1.1 永远不要使用string_view保存临时字符串的视图
1.2 同string的末尾加s,可用末尾加sv将字面量解释为std::string_view
2 字符串格式化
format()的一般占位符:{},中间的格式[index][:specifiier],表示索引和格式说明符,省略索引和显示说明索引不能混用。
2.1 格式说明符
[[fill]align][sign][#][0][width][.precision][type]
1. width
width指定待格式化的值所占字段的最小宽度,例如5.width也可以是另一组花括号,成为动态宽度。如果在花括号中指定了索引,例如{3},则动态宽度的width取自给定索引对应的format()的实参。如果未指定索引,例如{},则width取自format()的实参列表的下一个参数。
int i{42};
cout<<format("|{:5}|",i)<<endl;
cout<<format("|{:{}}|",i,7)<<endl;
2. [fill]align
align表示对齐方式<表示左对齐,>表示右对齐,^表示居中对齐。[fill]表示指定长度未到时的填充字符。
3. sign
-表示只显示负数的符号,+代表都显示,space代表对负数使用符号,对正数使用空格。
4. #
在指定格式前插入前缀来表示格式
5.type
指定了给定值要被格式化的类型。
6. precision
指定字符串或浮点的精度。
7.0
指定了对齐则忽略此项,否则在前缀之后,数值的前面填充0.