标准字符串

在使用 std::string 之前,你应该包含标题 string,因为它包含其他标题(例如 iostream)不包含的函数/运算符/重载。

将 const char *构造函数与 nullptr 一起使用会导致未定义的行为。

std::string oops(nullptr);
std::cout << oops << "\n";

如果 index >= size(),方法 at 抛出 std::out_of_range 异常。

operator[] 的行为有点复杂,在所有情况下它都有未定义的行为,如果 index > size(),但是当 index == size()

Version < C++ 11

  1. 在非 const 字符串上,行为未定义 ;
  2. 在 const 字符串上,返回对值为 CharT()字符) 的字符的引用。

Version >= C++ 11

  1. 返回对值为 CharT()字符) 的字符的引用。
  2. 修改此引用是未定义的行为

从 C++ 14 开始,不使用 foo,建议使用 "foo"s,因为 s用户定义的文字后缀 ,它将 const char* foo 转换为 std::string foo

注意:你必须使用名称空间 std::string_literalsstd::literals 来获取文字 s