对pop_back(),C ++感到困惑

时间:2011-12-18 04:32:40

标签: c++

我想了解vector::pop_back()的行为。所以我有以下代码片段:

vector<int> test;
test.push_back(1);
test.pop_back();
cout << test.front() << endl;

也许这是对的,但令我惊讶的是它打印出来1.所以我很困惑。 pop_back()仅能删除元素index > 0吗?

提前致谢!

2 个答案:

答案 0 :(得分:18)

通过在空向量上调用front来调用未定义的行为。这就像索引一个数组的边界。任何事情都可能发生,包括返回1

答案 1 :(得分:10)

pop_back这里将向量留空。访问空向量的front()未定义的行为。这意味着任何事情都可能发生 - 没有预测到什么。它可能会崩溃,它可以返回1,它可以返回42,它可以打印“Hello,world!”,它可以擦除你的硬盘,或者它可以summon demons through your nasal passages。对于C ++而言,这些都是可以接受的行为 - 这里刚刚发生以最终返回1。不要依赖它。