STL и Стандарты
STL и Стандарты
В книге я часто ссылаюсь на Стандарт С++, потому что основное внимание уделяется переносимой, стандартной версии С++. Теоретически все примеры, приведенные в книге, должны работать во всех реализациях С++. К сожалению, на практике это не так. Вследствие недоработок в компиляторах и реализациях STL даже правильный код иногда не компилируется или работает не так, как положено. В самых типичных случаях описывается суть проблемы и предлагаются обходные решения.
Иногда самый простой выход заключается в переходе на другую реализацию STL (пример приведен в приложении Б). Чем больше вы работаете с STL, тем важнее отличать компилятор от реализации библиотеки. Когда у программиста возникают проблемы с компиляцией правильного кода, он обычно винит во всем компилятор. Однако при работе с STL компилятор может быть в полном порядке, а проблемы оказываются связанными с ошибками в реализации. Чтобы подчеркнуть зависимость программ как от компилятора, так и от реализации библиотеки, я использую термин «платформа STL», под которым понимается комбинация конкретного компилятора с конкретной реализацией STL. Если в книге говорится о проблеме компилятора, значит, виноват именно компилятор. Но если речь идет о проблеме платформы STL, это следует понимать так: «виноват то ли компилятор, то ли библиотека, а может, и то и другое».
Обычно я говорю о компиляторах во множественном числе. Я искренне убежден в том, что проверка работоспособности программы на нескольких компиляторах улучшает ее качество (и особенно переносимость). Более того, использование нескольких компиляторов помогает распутать гордиев узел сообщений об ошибках, выданных при неправильном применении STL (рекомендации по расшифровке этих сообщений приводятся в совете 49).
Уделяя особое внимание тому, чтобы код соответствовал стандартам, я также стремлюсь избежать конструкций с непредсказуемым поведением. Последствия выполнения таких конструкций на стадии работы программы могут быть любыми. К сожалению, иногда эти конструкции могут делать именно то, что требуется, а это создает вредные иллюзии. Слишком многие программисты считают, что непредсказуемое поведение всегда ведет к очевидным проблемам, то есть сбоям обращений к сегментам или другим катастрофическим последствиям. Результаты могут быть гораздо более тонкими (например, искажение данных, редко используемых в программе); кроме того, разные запуски программы могут приводить к разным результатам. У непредсказуемого поведения есть хорошее неформальное определение: «Работает у меня, работает у тебя, работает во время тестирования, но не работает у самого важного клиента». Непредсказуемого поведения следует избегать, поэтому я особо выделяю некоторые стандартные случаи в книге. Будьте начеку и учитесь распознавать ситуации, чреватые непредсказуемым поведением.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
1.10. Стандарты Unix
1.10. Стандарты Unix Когда писалась эта книга, наибольший интерес в сфере стандартизации Unix вызывала деятельность группы Остина по пересмотру общих стандартов (The Austin Common Standards Revision Group, CSRG). Ими было написано в общей сложности около 4000 страниц спецификаций, описывающих более
B.5 Стандарты RFC
B.5 Стандарты RFC В документе RFC периодически публикуется официальный список стандартов и их текущий статус. Этот список является самостоятельным стандартом (STD 1). Информация в таблицах от B.1 до B.5 была взята из RFC 1920, опубликованного в марте 1996 г. и отражающего статус и
1.7. Стандарты Unix
1.7. Стандарты Unix В настоящее время стандарты Unix определяются Posix и The Open
17.1.2. Стандарты С
17.1.2. Стандарты С Разработка стандартов С была консервативным процессом, в котором серьезное внимание уделялось "сохранению духа" оригинального С, а акцент был сделан скорее на утверждении экспериментов в существующих компиляторах, чем на создании новых функций.
17.2. Стандарты Unix
17.2. Стандарты Unix Тот факт, что в 1973 году Unix была переписана на С, беспрецедентно упростил переносимость и модификацию операционной системы. В результате исходная Unix вскоре разделилась на семейство операционных систем. Unix-стандарты первоначально разрабатывались в целях
17.1.2. Стандарты С
17.1.2. Стандарты С Разработка стандартов С была консервативным процессом, в котором серьезное внимание уделялось "сохранению духа" оригинального С, а акцент был сделан скорее на утверждении экспериментов в существующих компиляторах, чем на создании новых функций.
17.2. Стандарты Unix
17.2. Стандарты Unix Тот факт, что в 1973 году Unix была переписана на С, беспрецедентно упростил переносимость и модификацию операционной системы. В результате исходная Unix вскоре разделилась на семейство операционных систем. Unix-стандарты первоначально разрабатывались в целях
Firebird и стандарты
Firebird и стандарты Соответствие стандарту - это, скорее, вопрос уровня соответствия, а не абсолют. Разработчики могут свободно реализовывать возможности языка, не описанные в стандарте. Соответствие касается способов реализации возможностей, распознаваемых стандартом и
Соглашения и стандарты.
Соглашения и стандарты. В настоящий момент к PGP относятся два зарегистрированных документа Интернет: RFC 1991 ("Формат обмена сообщениями PGP") и RFC 2015 ("Обеспечение безопасности MIME с помощью PGP", определяющий формат PGP/MIME).Введение новых алгоритмов и возможностей в PGP 5.x
Стандарты Wi-Fi
Стандарты Wi-Fi Сегодня используются три стандарта беспроводных сетей: IEEE 802.11b, 802.11a и 802.11g. Современные ноутбуки чаще всего оснащаются поддержкой всех стандартов.802.11b – первый стандарт беспроводных сетей, поэтому он является самым медленным (скорость до 11 Мбит/с). Стандарты
Стандарты кодирования
Стандарты кодирования Недавно мы начали определять стандарты кодирования. Очень полезно - жаль не сделали этого раньше. Это не займёт много времени, начни с простого и постепенно дополняй. Записывай только то, что может быть понятно не всем, при этом, по возможности, не
Региональные стандарты
Региональные стандарты Региональные настройки можно изменить, выполнив команду Пуск ? Панель управления ? Дата, время, язык и региональные стандарты ? Язык и региональные стандарты (рис. 13.22). Рис. 13.22. Окно Язык и региональные стандартыС помощью этого окна вы можете
1.6. СТАНДАРТЫ И ПРОГРАММИРОВАНИЕ
1.6. СТАНДАРТЫ И ПРОГРАММИРОВАНИЕ Стандарты давно используются в технике и программировании. Создание сложной системы немыслимо без стандартов. Они нужны для борьбы с хаосом и неразберихой, но вместе с этим стандарт не должен быть слишком «узким» и мешать техническому