为什么即使尚未初始化,获取字符串[0]也是有效的?

Why is it valid to get string[0] even when it has not been initialized?

本文关键字:有效 字符串 初始化 获取 为什么      更新时间:2023-10-16

请考虑此代码

string str;
cout << str[0] << str.size();

我得到的不是运行时错误,而是" 0",一个空格后面的0。为什么会这样?

str不是未初始化的,它默认为空std::string;即它的size()0。从 C++11 开始,该标准要求 std::basic_string::operator[] 返回对这种情况的空字符的引用。

如果pos == size(),则返回对值为CharT()的字符(空字符)的引用。

值得注意的是,在 C++11 之前,对于operator[]的非 const 版本,这是未定义的行为,对于 const 版本,将返回对 null 字符的引用;并且由于 C++11 对于非 const 版本,对返回的引用上的其他字符的任何修改都是未定义的行为。

顺便说一句:未定义的行为意味着一切皆有可能;它不一定是运行时错误。