Программирование >>  Оптимизация возвращаемого значения 

[ 1 ] 2 3 4 ... 96


Оптимизация возвращаемого значения

Сейчас у программистов С++ горячие денечки. Хотя коммерческие версии компиляторов языка С++ появились менее чем десять лет назад, за это время С++ стал стандартным языком для создания сложных систем почти на всех вычислительных платформах. Компании и программисты, решая серьезные задачи по разработке программного обеспечения, постоянно расширяют круг пользователей языка. Перед теми, кто пока не имел дело с С++, чаще стоит вопрос Когда начать использование языка? , а не Что будет, если мы начнем применять этот язык? . Стандартизация С++ завершена, а богатая функциональность и разнообразие тематик сопровождающих язык библиотек, которые включают и расширяют библиотеки С, позволяют создавать сложные, многофункциональные программы, не теряющие при этом переносимости, а также реализовывать стандартные алгоритмы и структуры данных с нуля . Компиляторы С++ продолжают совершенствоваться, их возможности расширяются, а качество генерируемого кода постоянно улучшается. Среды и средства для разработки на С++ становятся все более многочисленными, мощными и полнофункциональными. Библиотеки программного обеспечения, распространяемые на коммерческой основе, во многом устранили саму необходимость написания исходных текстов.

По мере взросления языка и роста опытности его пользователей изменилась и потребность в информации о нем. В 1990 году специалисты хотели знать, что представляет собой язык С++. К 1992 году их интересовало, как его применять. Сейчас программисты на С++ задают вопросы более высокого уровня. Как создавать программное обеспечение с учетом его адаптации к будущим потребностям? Как сделать программный код более эффективным, при этом не усложняя его и сохраняя корректность работы? Как реализовать ту или иную функцию, не поддерживаемую языком непосредственно?

В книге приводятся ответы на эти и многие похожие вопросы.

Книга показывает, как разрабатывать и внедрять более эффективное, чем то, которое вы создавали до сих пор, программное обеспечение на языке С++: содержащее меньшее количество ошибок, более надежное в экстремальных ситуациях, более производительное, более переносимое, более полно использующее возможности языка, требующее меньших затрат при поддержке, более пригодное для работы в системах, где задействовано несколько языков программирования, более простое при правильном использовании, затрудняющее неправильное использование. Короче, программное обеспечение, которое просто лучше.

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



имеет право на существование, что происходит, если не следовать ей, и при каких условиях стоит все же ее нарушать.

Правила можно разбить на несколько категорий. Одни относятся к отдельным свойствам языка, по преимуществу недавно появившимся, для которых еще не накоплено опыта по применению. Например, правила с 9 по 15 посвящены исключениям. Другие правила объясняют, как объединить возможности языка для выполнения нестандартных задач. В эту группу входят правила с 25 по 31, которые описывают, как ограничить количество или размещение объектов, как создавать функции, являющиеся виртуальными по отношению к объектам разных типов, как создавать интеллектуальные указатели и т.п. Некоторые правила касаются более сложных cnjaeB, так, правила с 16 по 24 связаны с проблемами эффективности. Но чему бы ни было посвящено правило, вопрос обсуждается серьезно и всесторонне. Эта книга учит, как использовать С++ наиболее эффективно. Описание конструкций языка, что составляет львиную долю текста других книг по С++, здесь является вспомогательной информацией.

Поэтому, приступая к чтению данной книги, вы должны быть уже знакомы с языком С++. Вы должны знать, что такое классы, уровни изоляции, виртуальные и невиртуальные функции и т.п., а также должны иметь представление о шаблонах и исключениях. Но пусть эти требования не смущают тех, кто не является специалистом по языку: исследуя закоулки С++, я всегда буду объяснять, как и что происходит.

Язык С++ в этой книге

Язык С++, представленный в этой книге, соответствует документу Final Draft International Standard (Финальный проект международного стандарта), выпущенному комитетом по стандартизации ISO/ANSI в ноябре 1997 года. Поэтому некоторые свойства языка, представленные в книге, ваши компиляторы, возможно, еще не поддерживают. Не волнуйтесь. Предполагается, что единственное новое свойство, которое вам потребуется, - шаблоны, а шаблоны реализованы почти везде. Я также использую исключения, но это использование в значительной мере ограничено правилами с 9 по 15, которые как раз и посвящены исключениям. Если у вас нет доступа к компилятору, поддерживающему исключения, ничего страшного. Это не повлияет на вашу работу с остальными частями книги. Но правила с 9 по 15 вам все же стоит почитать, потому что эти разделы помогут вам получить информацию, которой вы еще не владеете, но которую должны знать.

Допускаю, что благословение комитета по стандартам для какого-либо свойства языка или введение его в общепринятую практику не дает гарантии, что ваши компиляторы поддерживают это свойство и что известные способы применимы к существующим средам программирования. В тех случаях, когда возникает расхождение между теорией (утверждено комитетом по стандартам) и практикой (должно работать), я обсуждаю обе возможности, хотя склоняюсь к практическому решению. Так как рассматриваются обе стороны вопроса, у вас будет повод заглянуть в эту книгу всякий раз, когда ваши компиляторы на очередной шаг приблизятся к требованиям стандарта. Она покажет вам, как использовать



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

Заметьте, что я ссылаюсь на ваши компиляторы - во множественном числе. Различные компиляторы реализуют различные приближения к стандарту, поэтому я призываю вас вести разработку программного обеспечения с использованием как минимум двух компиляторов. Такая практика поможет вам избежать ненужной зависимости от нестандартных расширений языка, поддерживаемых только одним производителем компиляторов, или отклонений от стандарта. Это также позволит вам держаться подальше от переднего края компьютерных технологий, то есть от новых свойств языка, поддерживаемых только одним производителем компиляторов. Реализация таких свойств часто имеет значительные недостатки (наличие ошибок, низкая производительность, а иногда и то и другое). Кроме того, сообщество С++ еще не накопило достаточно опыта, чтобы предоставить разработчикам информацию, как правильно использовать новейшие свойства. Прокладывать дорогу - это здорово, но если ваша цель - создание надежного кода, нащупывать путь предоставьте другим.

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

Первая конструкция - это тип bool, имеющий в качестве значений константы true и false. Даже если ваши компиляторы не поддерживают данный тип, существуют два способа реализовать его. Один состоит в использовании глобального оператора епиш:

enum bool { false, true } ;

Такой прием позволяет перегружать функции, руководствуясь типом входящего аргумента bool или int. Однако у этого способа есть недостаток: встроенные операторы сравнения (такие как ==, <, >= и т.п.) все равно возвращают тип int. В результате приведенный ниже код не будет работать так, как это задумывалось:

voidf(int); void f(bool); int X, y;

f ( X < у ) ; / / Вызывает f {int) , a должен

вызывать f(bool).

Применение оператора enum может нарушить работу программы после перехода на компилятор, поддерживающий тип bool.

Другой вариант состоит в том, чтобы использовать typedef для типа bool и константы для true и false:

typedef int bool ; const bool false = 0 ; const booltrue = 1;



[ 1 ] 2 3 4 ... 96

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика