Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Справочное руководство по C++.doc
Скачиваний:
0
Добавлен:
03.01.2020
Размер:
2.03 Mб
Скачать

R.2.5.4 Строки литералов

Строка литералов есть последовательность символов (как они определены

в $$R.2.5.2), заключенная в двойные кавычки, т.е. "...". Строка

имеет тип "массив символов" и класс памяти static ($$R.3.5), она

инициализируется заданными символами. Будут ли все строки различны

(т.е. хранится в отдельных объектах), определяется реализацией.

Соседние строки литералов конкатенируются. Символы в строках,

полученных при конкатенации, хранятся отдельно. Например, после

конкатенации

"\xA" "B"

строка будет содержать два символа '\xA' и 'B' (а не один

шестнадцатеричный символ '\xAB').

После всех необходимых конкатенаций к строке добавляется

символ '\0', чтобы программа, читающая строку, могла определить

ее конец. Размер строки равен числу всех ее символов, включая

символ завершитель строки. Внутри строки перед символом двойной

кавычки " должен идти символ \.

Строка литералов, перед которой непосредственно идет символ L,

считается широкосимвольной строкой, например, L"asdf". Такая

строка имеет тип "массив элементов типа wchar_t", где wchar_t

целочисленный тип, определенный в стандартном заголовочном файле

<stddef.h>. Результат конкатенации обычных и широкосимвольных

строк литералов неопределен.

R.3 Основные понятия

Имя обозначает объект, функцию, множество функций, элемент

перечисления, тип, член класса, шаблон типа, значение или метку.

Имя становится известно в программе с помощью описания. Имя можно

использовать только в пределах части программы, называемой областью

видимости имени. Имя имеет тип, который задает его использование.

Имя, используемое в более чем одной единице трансляции, может

обозначать один и тот же (а может и разные) объект, функцию, тип,

шаблон типа или значение, в зависимости от компоновки ($$R.3.3)

этих единиц трансляции.

Объект имеет область для его хранения ($$R.3.7). Поименованный

объект имеет класс памяти ($$R.3.5), который определяет его время

жизни. Интерпретация значений, хранящихся в объекте, определяется

типом выражения, задающего доступ к объекту.

R.3.1 Описания и определения

Описание ($$r.7) делает известным в программе одно или несколько

имен. Описание считается определением, если только оно не описывает

функцию без задания ее тела ($$R.8.3), не содержит описателя

extern ($$R.7.11), не имеет части инициализации или тела функции,

не является описанием статического члена данных в описании класса

($$R.9.4), не является описанием имени класса ($$R.9.1), не является

описанием typedef ($$R.7.1.3). Ниже приведены примеры определений:

int a;

extern const c = 1;

int f(int x) { return x+a; }

struct S { int a; int b; };

enum { up, down };

тогда как ниже следуют только описания:

extern int a;

extern const c;

int f(int);

struct S;

typedef int Int;

Для каждого объекта, функции, класса и элемента перечисления,

используемых в программе, должно быть только одно определение

($$R.3.3). Если функция никогда не вызывается и ее адрес никогда

не используется, ее не нужно определять. Аналогично, если имя класса

используется только так, что не требуется знать определения класса,

то такой класс не надо определять.