Программирование >>  Инициализация объектов класса, структура 

1 ... 22 23 24 [ 25 ] 26 27 28 ... 395


В этой главе приводится обзор встроенных, или элементарных, типов данных языка С++. Она начинается с определения литералов, таких, как 3.14159 или pi, а затем вводится понятие переменной, или объекта, который должен принадлежать к одному из типов данных. Оставшаяся часть главы посвящена подробному описанию каждого встроенного типа. Кроме того, приводятся производные типы данных для строк и массивов, предоставляемые стандартной библиотекой С++. Хотя эти типы не являются элементарными, они очень важны для написания настоящих программ на С++, и нам хочется познакомить с ними читателя как можно раньше. М1 будем называть такие типы данных расширением базовых типов С++.

3.1. Литералы

В С++ имеется набор встроенных типов данных для представления целых и вещественных чисел, символов, а также тип данных символьный массив , который служит для хранения символьных строк. Тип char служит для хранения отдельных символов и небольших целых чисел. Он занимает один машинный байт. Типы short, int и long предназначены для представления целых чисел. Эти типы различаются только диапазоном значений, которые могут принимать числа, а конкретные размеры перечисленных типов зависят от реализации. Обычно short занимает половину машинного слова, int - одно слово, long - одно или два слова. В 32-битных системах int и long, как правило, одного размера.

Типы float, double и long double предназначены для чисел с плавающей точкой и различаются точностью представления (количеством значащих разрядов) и диапазоном. Обычно float (одинарная точность) занимает одно машинное слово, double (двойная точность) - два, а long double (расширенная точность) - три.

char, short, int и long вместе составляют целые типы, которые, в свою очередь, могут быть знаковыми (signed) и беззнаковгми (unsigned). В знаковых типах сам1й левый бит служит для хранения знака (0- плюс, 1 - минус), а оставшиеся биты содержат значение. В беззнаковых типах все биты используются для значения. 8-битов1й тип signed char может представлять значения от -128 до 127, а unsigned char - от 0 до

255.

Когда в программе встречается некоторое число, например 1, то это число называется литералом, или литеральной константой. Константой, потому что мы не можем изменить его значение, и литералом, потому что его значение фигурирует в тексте программ!. Литерал является неадресуемой величиной: хотя реально он, конечно, хранится в памяти машины, нет никакого способа узнать его адрес. Каждый литерал имеет определенный тип. Так, 0 имеет тип int, 3.14159 - тип double.

Литералы целых типов можно записать в десятичном, восьмеричном и шестнадцатеричном виде. Вот как выглядит число 20, представленное десятичным, восьмеричным и шестнадцатеричным литералами:

20 десятичный

024 восьмеричный

0х14 шестнадцатеричный

3. Типы данных С++



3.14159F 0/1f 12.345L 0.0 3el 1.0E-3E 2. 1.0L

Слова true и false являются литералами типа bool.

Представимые литеральные символьные константы записываются как символы одинарных кавычках. Например:

I a 2 (пробел)

Специальные символы (табуляция, возврат каретки) записываются как escape-последовательности . Определены следующие такие последовательности (они начинаются с символа обратной косой черты):

новая строка \n

горизонтальная табуляция \t забой

вертикальная табуляция возврат каретки прогон листа \f

звонок

обратная косая черта вопрос

одиночная кавгчка двойная кавычка

escape-последовательность общего вида имеет форму \ooo, где ooo - от одной до трех восьмеричных цифр. Это число является кодом символа. Используя ASCII-код, мы можем написать следующие литералы:

\7 ( звонок) \14 ( новая строка)

\0 (null) \062 (2)

Если литерал начинается с 0, он трактуется как восьмеричный, если с 0х или 0Х, то как шестнадцатеричный. Привычная запись рассматривается как десятичное число.

По умолчанию все целые литералы имеют тин signed int. Mожно явно определить целый литерал как имеющий тип long, приписав в конце числа букву L (используется как прописная L, так и строчная l, однако для удобства чтения не следует употреблять строчную: ее легко перепутать с 1). Буква U (или u) в конце определяет литерал как unsigned int, а две буквы - UL или LU - как тин unsigned long. Например:

[ 128u 1024UL 1L 8Lu

Литералы, представляющие действительные числа, могут быть записаны как с десятичной точкой, так и в научной (экспоненциальной) нотации. По умолчанию они имеют тип double. Для явного указания типа float нужно использовать суффикс F или f, а для long double - L или l, но только в случае записи с десятичной точкой. Например:



(пустая строка) a

\nCC\toptions\tfile.[cC]\n a multi-line \

string literal signals its \ continuation with a backslash

Фактически строковый литерал представляет собой массив символьных констант, где по соглашению языков С и С++ последним элементом всегда является специальный символ с кодом 0 (\0).

Литерал A задает единственный символ А, а строковый литерал А - массив из двух элементов: А и \0 (пустого символа).

Раз существует тип wchar t, существуют и литералы этого типа, обозначаем1е, как и в случае с отдельными символами, префиксом L:

L a wide string literal

Строковый литерал типа wchar t - это массив символов того же типа, завершенный нулем.

Если в тесте программа: идут подряд два или несколько строковых литералов (типа char или wchar t), компилятор соединяет их в одну строку. Например, следующий текст

two some

породит массив из восьми символов - twosome и завершающий нулевой символ.

this is not a good idea Результат конкатенации строк разного типа не определен. Если написать:

two L some

то на каком-то компьютере результатом будет некоторая осмысленная строка, а на другом может оказаться нечто совсем иное. Программы, использующие особенности реализации того или иного компилятора или операционной системы, являются непереносимыми. Мы крайне не рекомендуем пользоваться такими конструкциями.

Упражнение 3.1

Объясните разницу в определениях следующих литералов:

Символьный литерал может иметь префикс L (например, La), что означает специальный тип wchar t - двухбайтовый символьн1й тип, который применяется для хранения символов национальных алфавитов, если они не могут быть представлены обычным типом char, как, например, китайские или японские буквы.

Строковый литерал - строка символов, заключенная в двойные кавычки. Такой литерал может занимать и несколько строк, в этом случае в конце строки ставится обратная косая черта. Специальные символы могут быть представлены своими escape-последовательностями. Вот примеры строковых литералов:



1 ... 22 23 24 [ 25 ] 26 27 28 ... 395

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика