Jak skompilować operator std :: vector [] wykonując sprawdzanie ograniczeń w DEBUG, ale nie w RELEASE

Używam Visual Studio 2008.

Wiem, że std :: vector ma sprawdzanie ograniczeń za pomocą funkcji at () i ma niezdefiniowane zachowanie, jeśli spróbujesz uzyskać dostęp do czegoś przy użyciu operatora [] niepoprawnie (poza zakresem).

Jestem ciekawy, czy możliwe jest skompilowanie mojego programu z kontrolą granic. W ten sposób operator [] użyje funkcji at () i rzuci std :: out_of_range, gdy coś jest poza zakresem.

Tryb zwolnienia zostałby skompilowany bez sprawdzania ograniczeń dla operatora [], więc wydajność nie spada.

Zacząłem myśleć o tym, ponieważ migruję aplikację napisaną przy użyciu Borland C ++ do Visual Studio iw niewielkiej części kodu, który ja mam (z i = 0, j = 1):

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

Rozmiar wektora „v” wynosi [0] [1] (więc element 0 wektora ma tylko jeden element). To jest niezdefiniowane zachowanie, wiem, ale Borland powraca tutaj 0, VS upada. Awarię podoba mi się lepiej niż zwracanie 0, więc jeśli mogę wywołać więcej „awarii” przez zgłoszenie wyjątku std :: out_of_range, migracja zostanie zakończona szybciej (ujawniłoby to więcej błędów, które ukrywał Borland).

questionAnswers(5)

yourAnswerToTheQuestion