0
点赞
收藏
分享

微信扫一扫

C++字符串字面量初始化““s的使用方法与示例


tags: C++

写在前面

前几天看lc题解看到一个C++写法:​​""s​​​, 感觉之前没见过, 后来查看一番​​cppreference​​​​1​​​之后发现这个语法竟然是一个​​C++14​​时候出现的字符串字面量定义的简洁语法, 下面来具体看看:

代码

#include <string>
#include <iostream>
// must with stdc++14
void print_with_zeros(const std::string note, std::string const& s) {
std::cout << note;
for (const char c : s) {
(c ? std::cout << c : std::cout << "₀");
}
std::cout << " (size = " << s.size() << ")\n";
}
void t1() {
using namespace std::string_literals;

std::string s1 = "abc\0\0def";
std::string s2 = "abc\0\0def"s;
print_with_zeros("s1: ", s1);
print_with_zeros("s2: ", s2);

std::cout << "abcdef"s.substr(1, 4) << '\n';
/*
s1: abc (size = 3)
s2: abc₀₀def (size = 8)
bcde
*/
}

void t2() {
// 使用字符串字面量
using namespace std::string_literals;
std::cout << std::max(1, 2) << std::endl;
std::cout << std::max({1, 2, 34}) << std::endl;
std::cout << std::max({"abc"s, "cde"s, "acc"s}) << std::endl;
/*
2
34
cde
*/
}


int main() {
// t1();
t2();
}

其中第一个函数是cppreference中给出的例子, 不知道里面的那个Unicode字符是啥, 反正能用来代表​​\0​​​, 可以看出声明和不声明字符串字面量的区别还是很大的, 从​​typeid().name()​​​也能看出来, 之前我写过一篇关于在C++中直接用双引号放入​​max()​​​的初始化列表中比大小的文章, 已经分析过直接定义和通过​​string()​​​构造函数定义的区别了, 一个是C风格的字符数组, 另一个才是C++支持的string容器, 那么, 有了这个新标准, 就能重新写字符串的定义了, 直接诶在双引号后面加上​​s​​​即可, 并且如果觉得麻烦, 可以直接用​​using namespace std​​, 需要注意c++标准一定要在14及以上才行.

参考

  1. ​​std::literals::string_literals::operator""s - cppreference.com​​​; ​​↩︎​​


举报

相关推荐

c++ 初始化

0 条评论