ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 13.12.2020
Просмотров: 4314
Скачиваний: 28
Часть II. Язык программирования С++
276
template <class B> struct Box
{
B b;
};
template <template<class R> class S, class T> class Demo
{
S<T> *p;
public:
Demo(S<T> &b): p(&b) {}
T get() { return p->b; }
};
int main()
{
Box<int> b = {10};
Demo<Box, int> d(b);
cout << d.get() << endl; // 10
return 0;
}
Как и в случае с шаблонами функций, для параметров шаблона
класса, который является параметром другого шаблона класса,
могут быть установлены значения по умолчанию.
ЧАСТЬ
III
Стандартная библиотека
языка программирования C
Глава 20.
Стандартные определения <stddef.h>
Глава 21.
Стандартные функции <stdlib.h>
Глава 22.
Диагностика ошибок <assert.h>
Глава 23.
Функции с переменным количеством парамет-
ров <stdarg.h>
Глава 24.
Диапазоны целочисленных данных <limits.h>
Глава 25.
Диапазоны чисел с плавающей точкой <float.h>
Глава 26.
Обработка ошибок <errno.h>
Глава 27.
Математические функции <math.h>
Глава 28.
Функции классификации символов <ctype.h>
Глава 29.
Функции для работы со строками <string.h>
Глава 30.
Функции для работы с файлами <stdio.h>
Глава 31.
Организация нелокальных переходов <setjmp.h>
Глава 32.
Обработка исключительных ситуаций <signal.h>
Глава 33.
Поддержка локализации <locale.h>
Глава 34.
Работа с датами и временем <time.h>
Г Л А В А
20
Стандартные определения
<stddef.h>
В заголовочном файле stddef.h определена символическая кон-
станта
NULL
, макрокоманда
offsetof
и типы данных
ptrdiff_t
,
size_t
и
wchar_t
.
20.1. Типы данных
Тип
ptrdiff_t
используется для определения типа значения, по-
лученного при вычитании одного указателя из другого. Этот тип
является синонимом целочисленного типа со знаком и может
быть определен следующим образом:
typedef int ptrdiff_t;
Тип
size_t
используется для определения типа значения, которое
возвращает оператор
sizeof
. Этот тип является синонимом цело-
численного типа без знака и может быть определен следующим
образом:
typedef unsigned int size_t;
Тип
wchar_t
используется при работе с символами, для хранения
которых требуется два байта. Этот тип является синонимом це-
лочисленного типа без знака и может быть определен следующим
образом:
typedef unsigned short wchar_t;
Часть III. Стандартная библиотека языка программирования C
280
20.2. Макрос
NULL
Макрос
NULL
обычно используется для инициализации указате-
лей, начальное значение которых неизвестно. Определен этот
макрос следующим образом:
#define NULL 0
В языке программирования C++ макрос
NULL
может быть также
определен как:
#define NULL ((void *)0)
То есть в обоих случаях компилятор подставляет
0
вместо этой
константы.
20.3. Макрос
offsetof
Макрос
offsetof
предназначен для определения смещения члена
структуры относительно начала структуры. Смещение определя-
ется в байтах. Этот макрос может быть определен следующим
образом:
#define offsetof(s, m) (size_t)&(((s*)0)->m)
где параметр
s
задает тип структуры, а параметр
m
— имя члена
этой структуры. Если
m
задает битовое поле структуры, то пове-
дение макрокоманды
offsetof
в общем случае не определено.
В листинге 20.1 приведен пример использования макроса
offsetof
.
Листинг 20.1. Использование макроса
offsetof
#include<stddef.h>
#include<stdio.h>
struct emp
{
int empno;
char name[20];
double salary;
};