Некоторые реализации библиотеки C ++ имеют режим отладки, который выдает исключение, даже если вы используете синтаксис []
, но это не определено стандартом. Так что это может быть то, что вы испытали. Если вы хотите быть уверены, что вы должны использовать at()
.
C ++ не имеет проверки границ для примитивных массивов, однако, если ваш компилятор поддерживает новейшую версию C ++, вы можете использовать std::array
вместо примитивных массивов, и этот контейнер имеет метод at()
, такой же как std::vector
.
Я бы рекомендовал использовать std::array
, даже если вы не хотите использовать эту функцию, потому что у примитивных массивов есть некоторые другие проблемы (например, они распадаются на указатели по капле шляпы). std::array
ведет себя гораздо более согласованно (например, вы можете передавать их по значению в функции или возвращать их, и они будут работать правильно, тогда как написание очевидного синтаксиса для передачи массива по значению не удастся и вместо этого просто передаст указатель).
Сделайте себе одолжение и никогда не используйте примитивные массивы.