【发布时间】:2011-03-22 19:21:14
【问题描述】:
此示例代码有效吗?
#include<vector>
using namespace std;
int main() {
vector<int> vec(10); // create with 10 elements
vec.reserve(100); // set capacity to 100
vector<int>::iterator iter = vec.end(); // points 1 past vec[9]
vec.push_back( 777 );
bool is_this_valid_and_true = *iter == vec[10]; // ?
// VS2010 runtime error in debug build:
// Expression: vector iterator not dereferencable
// Works in release build
iter = vec.end() + 1; // points 2 past vec[10]?
vec.push_back( 888 );
vec.push_back( 999 );
is_this_valid_and_true = *iter == vec[12]; // ?
}
VS2010的错误可能和这个bug有关。
如果我设置命令行选项/D_HAS_ITERATOR_DEBUGGING=0 或设置
#define _HAS_ITERATOR_DEBUGGING 0
#include<vector>
没有错误。
编辑:
根据答案,我认为这段代码应该会导致错误。编译器中没有错误。它只在发布模式下工作,因为迭代器被实现为指针。
【问题讨论】:
-
没有错误。
有错误(它只是沉默而致命,稍后会用飞鼻恶魔杀死你)。