【发布时间】:2017-01-08 21:37:18
【问题描述】:
#include <iostream>
#include <string>
using std::string;
int main(){
string s;
std::cout << "size:" << s.size() << " "
<< "capacity:" << s.capacity() << std::endl;
std::cout << s[3] << std::endl;
return 0;
}
我定义了一个空的 string 对象,名为 s。 s.size() 和 s.capacity() 都是 0,但是在访问元素时 s[3],没有段错误,为什么?
【问题讨论】:
-
在这种情况下,您可以期待未定义的行为。这可能会或可能不会使您的程序崩溃。这种不确定性正是强烈建议不要这样做的原因!
-
绝对未定义的行为。可能使这不会崩溃的可能是您正在使用的标准库实现的小字符串优化