考虑这段代码
string str;
cout << str[0] << str.size();
我得到的不是运行时错误,而是 "0"
,一个空格后的 0
。为什么这是可能的?
最佳答案
str
不是未初始化的,它是 default initalized作为一个空的 std::string
;即它的 size()
是 0
。从 C++11 开始,标准需要 std::basic_string::operator[]为这种情况返回对空字符的引用。
If
pos == size()
, a reference to the character with valueCharT()
(the null character) is returned.
值得注意的是,在 C++11 之前,对于 operator[]
的非 const 版本,这是未定义的行为,对于 const 版本,将返回对空字符的引用;自从 C++11 的非常量版本以来,对返回引用上的其他字符的任何修改都是未定义的行为。
顺便说一句:Undefined behavior意味着一切皆有可能;它不一定是运行时错误。
关于c++ - 为什么在没有初始化的情况下获取string[0]也是有效的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43176196/