标准字符串
在使用 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
- 在非 const 字符串上,行为未定义 ;
- 在 const 字符串上,返回对值为
CharT()( 空字符) 的字符的引用。
Version >= C++ 11
- 返回对值为
CharT()( 空字符) 的字符的引用。 - 修改此引用是未定义的行为。
从 C++ 14 开始,不使用 foo,建议使用 "foo"s,因为 s 是用户定义的文字后缀 ,它将 const char* foo 转换为 std::string foo。
注意:你必须使用名称空间 std::string_literals 或 std::literals 来获取文字 s。