Справочное руководство по C++ | страница 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). Если функция никогда не вызывается и ее адрес никогда не используется, ее не нужно определять. Аналогично, если имя класса используется только так, что не требуется знать определения класса, то такой класс не надо определять.