Б. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004 (1160791), страница 5
Текст из файла (страница 5)
Надежда на действительное состояние по умолчанию . Д.35.3. Задержка выделения ресурса Гарантии стандартных контейнеров ДА.1. Вставка и удаление злементов Д.4.2. Гарантии н компромиссы ДА.З. Перестановка зв арО . ДАА. Инициализация и итераторы Д.4.5, Ссылки на з тементы . ДА.6. Преднкаты Другие части стандартной библиотеки. Д.5.1. Строки Д.5'.2. Потоки Д.5.3. Алгоритмы Д.5А. Ча!а1тау и Сощр!ех Д.5.5. Стандартная библиотека Си .. Значение для пользователей библиотеки ........................................... Советы .
Упралгнения . .1005 1009 . 1012 . 1013 . 1014 .. 1017 . 1017 . 1019 ...,. 1022 . 1023 . 1026 ... 1028 1031 .. 1032 ...... 1 034 . 1035 ..... 1036 . 1037 .. 1039 . 1041 .1044 .1044 . 1045 . 1046 . 1047 .... 1047 .1047 ,. 1048 . 1049 . 1049 .... 1049 . 1052 . 1052 1055 Предисловие автора к третьему русскому изданию В августе 1998 года был ратифицирован стандарт языка С++ (180/1ЕС 14882 «Бгапг(агй 1ог гйе Се«Ргойгашш1п81 апйцайе», результат голосования национальных комитетов по стандартизации: 22 — О).
Это событие знаменует новую эру стабильности и процветания С>+, а также связанных с языком инструментальных среде~в и приемов программирования. Лично для меня главным является то, что стандартный С«е лучше чем любая его прсдылущая версия соответствует моему замыслу С>+. Стандартный С++ и его стандартная библиотека позволяют мне писать лучшие, более элегантные и более эффективные программьп чем те, что я мог писать в прошлом. Чтобы добиться этого, я и сотни других людей лолго и интенсивно работалп в комитетах по стандартизации АХ81 и! БО.
Целью этих усилий было описать язык ц библиотеку, которые будут исправно служить всем пользователям языка, не предоставляя каких-либо преимуществ одной ~рупие пользователей, компании или стране перед остальными. Процесс стандартизации был открыт, справедлив, нацелен на качество н согласие. Усилия по стандартизации были инициированы Дмитрием Ленковым (Оп11ггу Беп(соч) из НеМейнРаскагс1, который работал в качестве первого председателя комитета. Во время завершения работ над стандартом председателем был Стив Кламаг (Бьете С!ашайе) из Бцп. Джонатан Шапиро ()опас(зап %ор(го) и Эндрю Кениг (Апг(гев Коеп(8) (оба из АТЛЕТ) были редакторами, которые — с помощью многих членов комитета — подготовилии текст стандарта основанный на моем исходном справочном руководстве по С+ э. Открытый и демократичный процесс стандартизации потенциально таит в себе одну опасность: результа~ может оказаться «комитетской разработкойгь В случае с С++ это1 о по большей час~и улалось избежать.
Во-первых, я состоял прелседателем рабочей группы по расширению языка. В этом качестве я оценивал все основные предложения и составлял окончательные варианты тех пз них, которые я, рабочая группа и комитет с шталн стоящими н в тоже время реализуемыми. Таким образом, комите~ в основном обсуждал направляемые ему относительно занершенные проекты, а не занимался разработкой таковых. Во-вторых, главная из попых составляющих стандартной библиотеки — стандартная библиотека шаблонов БТЦ предоставляющая общую, эффективную, типобезопасную и расширяемую среду контейнеров, птераторов и алгоритмов — была, в основном, результатоги работы одного человека, Александра Степанова (А!ехапс1ег 8герапоч) пз 11е>»1ей-Рас1сагс1. Важно, что стандарт Сч е — это не просто бумажка.
Он уже встроен в наиболее свежие реализации С++. Большинство основных реализаций поддержпвакзт стандарт (с о <снь немногочпсленнымн исклк>чениями), причем все обещают полное соответствие в течение ближайших месяцев. Чтобы стимулиронать честность производителей, две компании предлагают пакеты, проверяющие «стандартность> реализации С.»«. Итак, код, который я пишу сейчас, использует, если это необходимо, большинство возможностей, предлагаемых стандартным С++ и описанных в данном третьем издании «Языка программирования С+э».
26 Предисловие к русскому изданию Улучшения в языке С++ и расширение стандартной библиотеки заметно пзменилп то, как я пигпу код. Моп теперешние программы короче, яснее и эффективнее прежних, что является прямым результатом лучшей, более ясной и систематич ной поддержки абстракций в стандартном С+«. Улучшенная поддержка таких средств, как шаблоны и исключения, сокращают потребность в более низкоуровневых и запутанных возможностях языка.
Поэтому я считаю, что стандартный С++ проще в использовании, чем его предшествующие варианты, где мне приходилось имитировать средства, которые теперь поддерживаются непосредственно. Основываясь на приведенных наблюдениях, я решил, что необходимо полностью переписать второе издание «Языка программирования С-'+ю Никак иначе нельзя было должным образом отразить новые возможности, предлагаемые языком, н поддерживаемые ими приемы программирования и проектирования. В результате 80;4 материала третьего издания добавлено по сравнению со вторым. Измснтьлась и организация книги — теперь больший упор делается на технику и стиль программирования. Рассматриваемые изолированно, особенности языка скучны — они оживают лишь в контексте приемов программирования, ради поддержки которых н задумывались. Соответственно, С+«может теперь преподаваться как язык более высокого уров~ То есть основное внимание можно уделять алгоритмам и контейнерам, а не жонглированию битами, объединениями, строкамн в стиле С, массивами и проч.
Ьолее низкоуровневые понятня (такие как массивы, нетривиальное использованпе указателей и приведения типов), естественно. также придется изучить. Но их представление теперь удается отложить до тех пор, пока новичок в программировании на С+«л читатель или студент не обретут зрелость, необходимую, чтобы воспринимать эти средства в контексте более высокоуровневых концепций, к примененшо которых обучасмыс уже привыкли В частности, невозможно переусердствовать в подчеркивании важности преимущества статически типобезопасных строк и контейнеров перед стилями программирования, предполагающими использование множества макросов и приведений типов.
В тре~ьем излании «Языка программирования С« -'» мне удалось избавиться от почти всех макросов и свести ишюльзованис приведений типов к немногочисленным случаям, когда они действительно существенны. Я с ппаю серьезным недостатком принятую в С/С««форму макросов, которую теперь можно считать устаревшей благодаря наличию более подходящих средств языка, таких как шаблоны, пространства имен, встроенные функции и константы. Точно также, широкое использование приведений типов в любом языке сиг нализирует о плохом проектировании.
Как макросы, так и приведения являются частыми источниками ошибок. Тот факт, что без них можно обойтись, делает программирование на С -+ куда более безопасным и элегантным. Стандарт С«ь предназначен для того, чтобы изменить наш способ программировать на С«+, проектировать программы и обучать программнрованшо на С++.
Подобные изменения не происходят за один вечер. Я призываю вас не торопясь, внимательно присмотреться к стандарту С++, к приемам проектирования и программирования, используемым в третьем издании «Языка программирования С ~-н,, — и к вашему собственному стилю программирования. Прелполагаю, что вполне возможны значительныее улучшения. Но пусть ваша голова остается холодной! Чудес не бывает — прп написании кода опасно использовать языковыс возможности и приемы, которые вы понимаете лишь частично. Настало время изучать и экспериментировать — только поняв новые концепции п приемы, можно воспользоваться по-настоящему существенными преимуществами стандартного С++. Добро полгалопа~пь! Бьерн Стра уппруп От редакции третьего русского издания Книга, которую Вы держите в руках, не нуждается ни в представлении, пн в каком- либо особом вступлении со стороны редакппи русского издания.
Все что нужно, сказано автором. Существует, однако, несколько моментов, требующих пояснений, которые мы (с согласия автора) сочли возможным поместить до основного текста (в противном случае соответствующие сведения пришлось бы организовывать в сноски, что не всегда удобно читателю, тем более что не все читают книгу от корки до корки). Речь идет об исправлениях, внесенных в текст оригинального издания, о переводе некоторых терминов и о состоянии дел с прохожлением стандарта С++, В сноски нами вынесено лишь несколько незначительных комментариев; эти немно~ош1сленные сноски снабжены пометкой «примеч.
Ред.», чтобы отличить нх от авторских. Исправления К моменту завершения работы пад черновым текстом русского перевода оригинальное англоязычное издание выдержало множество тиралгсй. Настоящий перевод отражает все исправления и улучшения, внесенные в оригинальное издание и собранные в файлах с Зп1 рг1пвпд2.Ьгш! по Згг) рг1пвпй18.Ьгш1, которые доступны по адресу дГ)р;//илии.гезеагс1ьдгг.сот/ Ьз/ЗггЬЬГт! Мы рекомендуем периодически заглядывать на ЪЪ'еЬ-страничку с исправлениями в оригинальном издании, так как там могут появиться очередные файлы, работу с которыми мы вынуждены оставить заинтересованному чита~елю.
%'еЬ-страничку книги также можно отыскать по адресу; Юр. //иповь а и. сот/свели Перевод терминов Мы очень старались переводить текст и особенно спепнальные термины таким образом, чтобы перевод был совершенно ясен и пе нуждался в каких-либо комментариях.