|
Программирование >> Операторы преобразования типа
Знакомство с С++ и стандартной библиотекой История Процесс стандартизации С++ начался в 1989 году и продолжался до конца 1997 года, хотя некоторые формальные предложения отложили его окончательную публикацию до сентября 1998 года. Результатом этой работы стало справочное руководство, насчитывающее около 750 страниц и опубликованное международной организацией по стандартизации (ISO). Стандарт получил название Information Technology - Programming Languages - С++ , ему был присвоен номер ISO/IEC 14882-1998, и он распространяется национальными представительствами ISO (в США это ANSI). Стандарт стал важной вехой на пути развития С++. Строгие, формализованные определения синтаксиса н правил поведения С++ упрощают преподавание языка, написание программ С++, а также их адаптацию для других и.латформ. В результате пользователь получает дополнительную свободу выбора между реализациями С++. От повышения надежности и переносимости программ выигрывают разработчики реализаций библиотеки и дополнительного инструментария. Благодаря стандарту прикладные программисты С++ работают быстрее и эффективнее, кроме того, сокращаются затраты времени и сил на их сопровождение. Одной из составляющих стандарта является стандартная библиотека. Она содержит базовые компоненты для вьшолнения операций ввода-вывода, для работы со строками, контейнерами (структурами данных) и алгоритмами (сортировка, поиск, слияние и т. д.), для математических вычислений и, как и следовало ожидать от международного стандарта, для поддержки интернационализации, в том числе разных кодировок. Возможно, вас интересует, почему процесс стандартизации занял почти десять лет. Более того, после близкого знакомства со стандартом возникает другой вопрос - почему после столь долгой работы результат по.лучился не идеальным. Десяти лет оказалось недостаточно! Впрочем, с точки зрения истории и контекста стандартизации сделано довольно много. Результат вполне пригоден для практического применения, хотя и не совершенен (как и все в этом мире). Дело в том, что стандарт создавался не какой-нибудь компанией с излишками средств и свободного времени. Люди, занимающиеся стандартизацией, за свою работу получают очень мало или не получают вообще ничего. Следовательно, если специалист не работает на компанию, заинтересованную в появлении стандарта, он работает просто для собственного удовольствия. К счастью, в мире еще встречаются энтузиасты, у которых хватает свободного времени и денег. Стандарт С++ появился не на пустом месте. За основу был взят язык С++ в том виде, в котором он был описан Бьярном Страуструпом, создателем С++. Однако у специализированной библиотеки не было прототипа в виде книги или существующей библиотеки. В библиотеку были включены готовые реализации классов Из-за этого библиотека ползилась недостаточно однородной. В разных компонентах применяются разные архитектурные принципы. В качестве примера можно привести различия между строковыми классами и STL, набором структур данных и алгоритмов. О Проектировщики строковых классов стремились сделать их как можно более надежными и удобными. По этой причине интерфейс строковых классов почти не требует пояснений и выявляет многие ошибки в параметрах. О Основной целью проектирования STL было объединение разных структур данных с разными алгоритмами при обеспечении оптимального быстродействия. В результате удобство работы с STL оставляет желать лучшего, а многие логические ошибки не проверяются реализациями. Чтобы извлечь максимум пользы из широты возможностей и замечательного быстродействия STL, необходимо знать основные принципы и внимательно применять их на практике. Все эти компоненты являются частью одной библиотеки. Проектировщики постарались хотя бы отчасти согласовать их, но в целом каждый компонент сохранил свою базовую философию проектирования. Один из компонентов библиотеки считался фактическим стандартом еще до начала официальной стандартизации; это библиотека lOStream. Разработанная в 1984 году, она была реализована заново с частичной переработкой архитектуры в 1989 году. Библиотека уже использовалась во многих программах, поэтому ее общая концепция была сохранена для обеспечения обратной совместимости. Итоговый стандарт (язык и библиотека) стал результатом обсуждения и участия многих сотен людей со всего мира. Например, японцы внесли ряд полезных предложений из области интернационализации. В процессе обсуждения совершались ошибки, а участники нередко расходились во мнениях. Всем казалось, что в 1994 году стандарт уже близится к завершению, однако включение STL кардинально изменило всю библиотеку. Но чтобы проект все же когда-нибудь завершился, разработчики постепенно перестали принимать новые предложения, какими бы полезными они ни были. Из-за этого в стандарт не была включена такая распространенная структура данных, как хэш-таблица. Появление стандарта не означает, что эволюция С++ завершена. В стандарте будут исправляться ошибки и несоответствия; вполне вероятно, что лет через пять появится его следующая версия. Тем не менее на ближайшие годы у про- Воз.можно, вас интересует, почему в процессе стандартизации библиотека не была спроектирована .заново? Дело в том, что основной целью стандартизации является не изобретение или разработка чего-либо, а согласование уже готовых решений. граммистов С++ имеется стандарт, а вместе с ним - и возможность написания универсального кода, переносимого на разные платформы. Новые языковые возможности Стандартизация базовых возможностей языка и библиотеки С++ происходила параллельно. При таком подходе в библиотеке могли применяться усовершенствованные средства языка, а язык выигрывал от опыта реализации библиотеки. Более того, в процессе стандартизации библиотеки часто использовались специальные языковые конструкции, которые еще не поддерживались существующими компиляторами. Современный язык С++ заметно отличается от С++ пятилетней давности. Если вы не следили за его развитием, возможно, некоторые новые конструкции, используемые в библиотеке, окажзтся для вас неожиданностью. В этом разделе приводится краткий обзор новых возможностей языка. За подробностями обращайтесь к специализированным учебникам. На момент написания книги новые язьнсовые конструкции не поддерживались некоторыми компиляторами. Автор надеется (и не без оснований), что ситуация скоро изменится, тем более что многие разработчики компиляторов участвовали в процессе стандартизации. Тем не менее отдельные случаи несовместимости могут ограничивать использование библиотеки. В переносимых версиях библиотеки обычно учитывается, какие возможности реализованы в конкретной среде (обычно для определения поддерживаемых возможностей запускаются тестовые программы, а затем по результатам проверки настраиваются препро-цессорные директивы). Наиболее характерные и важные ограничения будут упоминаться в сносках. В следующих подразделах рассматриваются основные языковые возможности, важные для стандартной библиотеки С++. Шаблоны Практически все составляющие стандартной библиотеки оформлены в виде шаблонов. Без поддержки шаблонов использовать стандартную библиотеку невозможно. Более того, для функционирования библиотеки была нужна поддержка некоторых специальных свойств шаблонов, о которых будет рассказано после краткого обзора. Шаблонами называются функции или классы, определяемые без указания одного или нескольких типов. При использовании шаблона эти типы передаются в виде аргументов, явно или косвенно. Рассмотрим типичный пример - функцию, которая возвращает большее из двух значений: template <class Т> Inline const Т& max (const Т& a. const T& b) Если a<b, вернуть b: иначе вернуть a. return a < b ? b : a:
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |