Глава 7. Указатели и ссылки__________________________________173

Выход за границы массива

Запредельный (out-of-bounds) индекс — это такой индекс, значение которого больше или равно размеру массива. Индекс, равный размеру массива, также находится за его границей, поскольку нумеруются индексы от нуля, следовательно номер последнего элемента на единицу меньше размера массива.

Выход за границы массива может привести к сбою вашей программы или операционной системы. Одна из наиболее типичных ошибок — промах на единицу, когда происходит обращение к следующему за последним элементу массива.

Если вы способны вообразить, что операция массива может быть реализована как функция, то вам несложно будет представить себе код, осуществляющий в этой оператор-функции контроль- границ массива.

Массивы с автоматическим контролем границ

C++ не поддерживает прямо массивы с автоматическим контролем границ (bounded array). Обычно массив имеет индексы от 0 до количества элементов минус 1. Однако некоторые задачи удобнее решать, используя массивы с автоматическим контролем границ. Опять-таки, если вы в силах представить, что операцию массива можно реализовать как функцию, то заодно представьте себе простую операцию сложения, которая преобразует произвольный индекс в число в диапазоне от нуля до размера массива.

Одно из свойств C++, делающее этот язык столь мощным, заключается в том, что он дает разработчику возможность воплощать сложные идеи в простой и понятной записи. Если нетривиальные типы данных — вроде массивов с автоматическим контролем границ — можно записывать в той же нотации, что и обычные встроенные, то программирование по большей части будет таким же простым и понятным. Продвигаясь дальше, имейте в виду, что на этих концепциях строятся еще более передовые и выразительные возможности C++.

Далее...

В этой главе был дан обзор применения нескольких операций. Рассмотрение намеренно носило общий характер, поскольку наверняка большинству из вас этот материал в основном знаком. Желательно, чтобы мелочи не заслоняли от вас смысла обсуждаемых вопросов.

Если какие-то операции в этой главе для вас полностью внове, то надо немного попрактиковаться в их употреблении, просто вставляя в функцию main. На первый взгляд с ними все обстоит достаточно просто; однако в C++ нет ничего поверхностного, как вы увидите далее, познакомившись с изнанкой этой простоты.