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

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

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

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

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

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

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

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

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

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