C++系列(1) — string

字符串

字符串实现

string是模板类 basic_string 的特化形式。

using string = std::basic_string<char>;

区分string与char *

标准库string

/*为了避免与用户自定义字面量的冲突,后缀“s”不能直接使用,必须用 using 打开名字空间才行*/
using namespace std::literals::string_literals;
auto str = "std string"s; // 后缀s,表示是标准字符串,直接类型推导

原始字符串(Raw string literal)

auto str = R"(nier:automata)"; // 原始字符串:nier:automata

一个小问题:在原始字符串里面写引号 + 圆括号的形式该怎么办呢?

对于这个问题,C++ 也准备了应对的办法,就是在圆括号的两边加上最多 16 个字符的特别“界定符”(delimiter),这样就能够保证不与字符串内容发生冲突。

auto str5 = R"==(R"(xxx)")==";// 原样输出:R"(xxx)"

C++17 string_view的简单实现

class my_string_view final // 简单的字符串视图类,示范实现
{
public:
	using this_type = my_string_view; // 各种内部类型定义
	using string_type = std::string;
	using string_ref_type = const std::string&;
	using char_ptr_type = const char*;
	using size_type = size_t;
private:
	char_ptr_type ptr = nullptr; // 字符串指针
	size_type len = 0; // 字符串长度
public:
	my_string_view() = default;
	~my_string_view() = default;
	my_string_view(string_ref_type str) noexcept
		: ptr(str.data()), len(str.length())
	{}
public:
	char_ptr_type data() const // 常函数,返回字符串指针
	{
		return ptr;
	}
	size_type size() const // 常函数,返回字符串长度
	{
		return len;
	}
};
posted @ 2020-07-26 14:07  远跋  阅读(74)  评论(0编辑  收藏  举报