Cómo hacer que el operador de std :: vector [] compile haciendo verificaciones de límites en DEBUG pero no en RELEASE

Estoy usando Visual Studio 2008.

Soy consciente de que std :: vector tiene límites de verificación con la función at () y tiene un comportamiento indefinido si intenta acceder a algo usando el operador [] incorrectamente (fuera de rango).

Tengo curiosidad si es posible compilar mi programa con la verificación de límites. De esta manera, el operador [] usaría la función at () y lanzaría un std :: out_of_range siempre que algo esté fuera de los límites.

El modo de lanzamiento se compilaría sin límites, buscando el operador [], de modo que el rendimiento no se degrade.

Me puse a pensar en esto porque estoy migrando una aplicación que se escribió usando Borland C ++ a Visual Studio y en una pequeña parte del código tengo esto (con i = 0, j = 1):

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

El tamaño del vector 'v' es [0] [1] (por lo tanto, el elemento 0 del vector tiene solo un elemento). Este es un comportamiento indefinido, lo sé, pero Borland está devolviendo 0 aquí, VS se está estrellando. Me gusta el bloqueo mejor que devolver 0, por lo que si puedo obtener más "bloqueos" debido a la excepción std :: out_of_range que se produce, la migración se completará más rápido (por lo que expondría más errores que Borland estaba escondiendo).

Respuestas a la pregunta(5)

Su respuesta a la pregunta