Программирование. Принципы и практика использования C++ Исправленное издание, стр. 411
• Исключения (
trycatchРассмотрим пример, созданный просто для того, чтобы продемонстрировать разнообразие инструкций (какую задачу они решают?).
int* f(int p[],int n){ if (p==0) throw Bad_p(n); vector<int> v; int x; while (cin>>x) { if (x==terminator) break; // выход из цикла while v.push_back(x); } for (int i = 0; i<v.size() && i<n; ++i) { if (v[i]==*p) return p; else ++p; } return 0;}A.7. Объявления
Объявление (declaration) состоит из трех частей:
• имя объявляемой сущности;
• тип объявляемой сущности;
• начальное значение объявляемой сущности (во многих случаях необязательное).
Мы можем объявлять следующие сущности:
• объекты встроенных типов и типов, определенных пользователем (раздел A.8);
• типы, определенные пользователем (классы и перечисления) (разделы A.10–А.11, глава 9);
• шаблоны (шаблонные классы и функции) (раздел A.13);
• альтернативные имена (раздел A.16);
• пространства имен (разделы A.15 и 8.7);
• функции (включая функции-члены и операторы) (раздел A.9, глава 8);
• перечисления (значения перечислений) (разделы A.11 и 9.5);
• макросы (разделы A.17.2 и 27.8).
A.7.1. Определения
Определение с инициализацией, резервирующее область памяти или как-то иначе поставляющую компилятору всю информацию, необходимую для использования имени в программе, называется определением (definition). Каждый тип, объект и функция в программе должны иметь только одно определение. Рассмотрим примеры.
double f(); // объявлениеdouble f() { /* ... */ }; // также определениеextern const int x; // объявлениеint y; // также определениеint z = 10; // определение с явной инициализациейКонстанты должны быть инициализированы. Для этого используется инициализатор, если константа не объявлена с помощью ключевого слова extern (в таком случае инициализатор вместе с определением должны быть расположены в другом месте) или если константа не имеет тип, имеющий конструктор по умолчанию (раздел A.12.3). Константные члены класса должны инициализироваться в каждом конструкторе с помощью инициализатора (раздел A.12.3).
A.8. Встроенные типы
Язык C++ имеет много фундаментальных типов и типов, составленных из фундаментальных типов с помощью модификаторов.

Здесь
Tlong unsigned intlong doubleunsigned charconst char*charshort doublefloatsigned boolshort long intlong long long long intlong long intlong longТипы с плавающей точкой (floating-point types) — это типы
floatdoublelong doubleЦелочисленные типы (integer types), иногда называемые интегральными (integral), — это типы
boolcharshortintlonglong longРазмеры встроенных типов обсуждались в разделах 3.8, 17.3.1 и 25.5.1; указатели и массивы — в главах 17 и 18; ссылки — в разделах 8.5.4–8.5.6.
A.8.1. Указатели
Указатель (pointer) — это адрес объекта или функции. Указатели хранятся в переменных указательных типов. Корректный указатель на объект содержит адрес этого объекта.
int x = 7;int* pi = &x; // указатель pi ссылается на объект xint xx = *pi; // *pi — это значение объекта, // на который ссылается указатель pi, т.е. 7Некорректный указатель — это указатель, не содержащий указателя ни на один объект.
int* pi2; // неинициализированный*pi2 = 7; // неопределенное поведениеpi2 = 0; // нулевой указатель (указатель pi2 остается некорректным)*pi2 = 7; // неопределенное поведениеpi2 = new int(7); // теперь указатель pi2 становится корректнымint xxx = *pi2; // отлично: переменная xxx становится равной 7Мы хотим, чтобы все некорректные указатели были нулевыми (
0if (p2 == 0) { // "если указатель некорректный" // не используйте значение *p2