Como fazer o operador std :: vector [] compilar fazendo a verificação de limites no DEBUG, mas não no RELEASE

Estou usando o Visual Studio 2008.

Estou ciente de que o std :: vector tem verificação de limites com a função at () e tem comportamento indefinido se você tentar acessar algo usando o operador [] incorretamente (fora do intervalo).

Estou curioso para saber se é possível compilar meu programa com a verificação de limites. Dessa forma, o operador [] usaria a função at () e lançaria um std :: out_of_range sempre que algo estivesse fora dos limites.

O modo de liberação seria compilado sem verificação de limites para operador [], portanto, o desempenho não se degrada.

Eu comecei a pensar sobre isso porque estou migrando um aplicativo que foi escrito usando o Borland C ++ para o Visual Studio e em uma pequena parte do código eu tenho isso (com i = 0, j = 1):

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

O tamanho do vetor 'v' é [0] [1] (então o elemento 0 do vetor tem apenas um elemento). Este é o comportamento indefinido, eu sei, mas a Borland está retornando 0 aqui, VS está falhando. Eu gosto do crash melhor do que retornar 0, então se eu puder obter mais 'crashes' pela exceção std :: out_of_range que está sendo lançada, a migração seria concluída mais rapidamente (para expor mais bugs que o Borland estava escondendo).

questionAnswers(5)

yourAnswerToTheQuestion