Регистрация
21 Июн 2013
Сообщения
86
Репутация
0
Спасибо
0
Монет
0
В языке С++ можно обращаться к элементам за пределами
массива (при этом программа не завершается аварийно). Об-
судите достоинства и недостатки такого решения.
 
Это скорее недостаток чем достоинство. При чем не всегда программа не завершается аварийно, а только тогда, когда вы не вышли за пределы кучи. Если же обращение к массиву будет далеко за пределами самого массива то винда или другая ОС выкинет ошибку типа программа попыталась записать (прочитать) данные по такому то адресу и была "отослана нахрен" завершена. Плюсы - это если у вас есть два разных массива идущих друг за другом и имеющих идентичные данные. И вы пробежавшись по первому массиву бежите по следующему с одной и той же задачей. Не безопасно. Нужно понимать как храняться данные. Компилятор может выровнять следующий массив по адресу кратному 16 и даже если предыдущий массив занимал только 12 байт часть памяти может оставить пустой в угоду производительности. Отсюда вывод что такой подход к программированию не может и не должен присутствовать в жизни. Иначе ракеты будут не космос бороздить, а на землю падать. И нужно понимать что программисты зачастую пытаются написать понятный код, так как 80% рабочего времени это не написание кода, а его чтение и чем понятней человек напишет, тем проще потом будет его читать. А такой подход может запутать программиста и тот может посчитать ошибкой что обращаются к индексу находящемуся за пределами массива.
 
Программа не вылетать не обязана в этом случае. Никогда все адресное пространство не является доступным программе.
 
Можно. Но не вижу практического смысла. Это не структура и не объединение, где точно известно какая переменная за какой размещена в памяти... А выбирать что-то из "мусора" не имеет смысла
 
Достоинства: отсутствие проверки ускоряет выполнение программы. Недостатки: отсутствие проверки увеличивает вероятность трудно обнаруживаемой ошибки программиста. Но C++ рассчитан на крутых профессионалов и высокое быстродействие кода, так что в нем это вполне оправдано. P.S. На тех, кто пишет "памагите", он явно не рассчитан ;)
 
Назад
Сверху