Как заставить оператор std :: vector [] компилировать, выполняя проверку границ в DEBUG, но не в RELEASE

Я использую Visual Studio 2008.

Мне известно, что std :: vector имеет проверку границ с помощью функции at () и имеет неопределенное поведение, если вы пытаетесь получить доступ к чему-либо с помощью оператора [] неправильно (вне диапазона).

Мне любопытно, можно ли скомпилировать мою программу с проверкой границ. Таким образом, оператор [] будет использовать функцию at () и выбрасывать std :: out_of_range всякий раз, когда что-то выходит за пределы.

Режим освобождения будет скомпилирован без проверки границ для оператора [], поэтому производительность не ухудшится.

Я задумался об этом, потому что я переносил приложение, написанное с использованием Borland C ++, в Visual Studio, и в небольшой части кода у меня есть это (с i = 0, j = 1):

v[i][j]; //v is a std::vector<std::vector<int> >

Размер вектора 'v' равен [0] [1] (поэтому элемент 0 вектора имеет только один элемент). Это неопределенное поведение, я знаю, но Borland возвращает 0 здесь, VS падает. Мне нравится сбой лучше, чем возвращать 0, поэтому, если я смогу получить больше «сбоев» из-за генерируемого исключения std :: out_of_range, миграция будет завершена быстрее (поэтому будет выявлено больше ошибок, которые скрывал Borland).

Ответы на вопрос(5)

Ваш ответ на вопрос