标准字符串
在使用 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
。