Eag*_*gle 2 c++ string language-lawyer c++11
考虑这段代码
string str;
cout << str[0] << str.size();
Run Code Online (Sandbox Code Playgroud)
而我得到的是不是一个运行时错误,但是" 0"
,一个0
下面的空间.为什么这可能?
str
没有未初始化,它默认为空的std::string
; 即它size()
是0
.从C++ 11开始,该标准要求std :: basic_string :: operator []返回对这种情况的null字符的引用.
如果
pos == size()
,CharT()
则返回对具有值的字符(空字符)的引用.
值得注意的是,在C++ 11之前,对于非const版本,operator[]
这是未定义的行为,对于const版本,将返回对null字符的引用; 并且由于非const版本的C++ 11,对返回引用上的其他字符的任何修改都是未定义的行为.
顺便说一句:未定义的行为意味着一切皆有可能; 它不一定是运行时错误.