Программирование. Принципы и практика использования C++ Исправленное издание, стр. 422
typedef int* Pint; // Pint — это указатель на intnamespace Long_library_name { /* ... */ }namespace Lib = Long_library_name; // Lib — это Long_library_nameint x = 7;int& r = x; // r — это xСсылки (см. разделы 8.5.5 и A.8.3) — это механизм указания на объекты, работающий на этапе выполнения программы. Ключевые слова
typedefnamespacetypedeftypedef char* Pchar; // Pchar — это имя типа char*Pchar p = "Idefix"; // OK: p — это указатель типа char*char* q = p; // OK: p и q — указатели типа charint x = strlen(p); // OK: p — указатель типа char* A.17. Директивы препроцессора
Каждая реализация языка C++ содержит препроцессор (preprocessor). В принципе препроцессор работает до компилятора и преобразовывает исходный код, написанный нами, в то, что видит компилятор. В действительности это действие интегрировано в компиляторе и не представляет интереса, за исключением того, что оно может вызывать проблемы. Каждая строка, начинающаяся символом
#A.17.1. Директива #include
Мы широко использовали препроцессор для включения заголовочных файлов. Рассмотрим пример.
#include "file.h"Эта директива приказывает препроцессору включить содержимое файла
file.h(<...>"..."#include<vector>Это рекомендованная система обозначений для включения стандартных заголовков.
A.17.2. Директива #define
Препроцессор выполняет также определенные манипуляции с символами, которые называются макроподстановками (macro substitution). Например, определим имя символьной строки.
#define FOO barТеперь везде, где препроцессор увидит символы
FOObarint FOO = 7;int FOOL = 9;В таком случае компилятор увидит следующий текст:
int bar = 7;int FOOL = 9;Обратите внимание на то, что препроцессор знает об именах языка С++ достаточно много, чтобы не заменить символы
FOOFOOLС помощью директивы
define#define MAX(x,y) (((x)>(y))?(x) : (y))Их можно использовать следующим образом:
int xx = MAX(FOO+1,7);int yy = MAX(++xx,9);Эти выражения будут развернуты так:
int xx = (((bar+1)>( 7))?(bar+1) : (7));int yy = (((++xx)>( 9))?(++xx) : (9));Подчеркнем, что скобки необходимы для того, чтобы получить правильный результат при вычислении выражения
FOO+1xxЕсли уж вам приходится использовать макросы, то называйте их, используя только прописные буквы, например
ALL_CAPITAL_LETTERSmaxСм. также раздел 27.8.
Приложение Б
Обзор стандартной библиотеки
“По возможности, вся сложность должна быть скрыта
от постороннего взгляда”.
Дэвид Дж. Уилер (David J. Wheeler)
Это приложение содержит краткий обзор основных возможностей стандартной библиотеки языка С++. Изложенная в нем информация носит выборочный характер и предназначена для новичков, желающих получить общее представление о возможностях стандартной библиотеки и узнать немного больше, чем написано в основном тексте книги.
Б.1. Обзор
Это приложение является справочником и не предназначено для последовательного чтения от начала до конца, как обычная глава. В нем более или менее систематично описываются основные элементы стандартной библиотеки языка С++. Впрочем, этот справочник не полон; он представляет собой краткий обзор с немногочисленными примерами, иллюстрирующими ключевые возможности. За более подробным объяснением читателям часто придется обращаться к соответствующим главам данной книги. Кроме того, следует подчеркнуть, что мы не стремились к точности стандарта и не придерживались его терминологии. Более подробную информацию читатели найдут в книге Stroustrup, The C++ Programming Language [13]. Полным определением языка является стандарт ISO C++, но этот документ не предназначен для новичков и не подходит для первоначального изучения языка. Не забудьте также об использовании документации, доступной в Интернете.
Какая польза от выборочного (а значит, неполного) обзора? Вы можете быстро найти известную операцию или бегло просмотреть раздел в поисках доступных операций. Вы можете найти очень подробную информацию в других источниках: но что конкретно искать, вам подскажет именно этот краткий обзор. В этом приложении содержатся перекрестные ссылки на учебный материал из других глав, а также кратко изложены возможности стандартной библиотеки. Пожалуйста, не старайтесь запомнить изложенные в нем сведения; они предназначены не для этого. Наоборот, это приложение позволит вам избавиться от необходимости запоминать лишнее.