我不确定这个代码出了什么问题:
std::vector<int> myVector(0);
if (myVector.back() == 12)
myVector.push_back(12);
似乎在空向量上调用back()会使程序崩溃。
我不明白它为什么会崩溃?在调用back()
之前,我们需要检查向量的长度吗?或者可能是一个bug?
文档中说,如果向量为空,它将返回一个未定义的值。
在调用back()之前,我们需要检查向量的长度吗?
总之:是的。这是你的bug,你的向量是空的,所以没有"back"元素。
文档应该说明(如果它说了什么的话)在空向量上调用back()
会导致未定义的行为,而不是返回未定义的值。
c++11标准告诉这一点:
23.3.2.8/3
对零大小数组调用front()或back()的效果是不确定的。
由于行为是不明确的,任何事情都可能发生。你很幸运撞了车。