Элементарные типы данных
Элементарные типы данных
Предлагаемые в С++ элементарные типы данных аналогичны тем, которые используются в Java или C#. На рис. Б.2 приводятся список элементарных типов С++ и их определение на платформах, поддерживаемых Qt 4:
• bool — булево значение,
• char — 8-битовый целый тип,
• short — 16-битовый целый тип,
• int — 32-битовый целый тип,
• long — 32- или 64-битовый целый тип,
• long long[9] — 64-битовый целый тип,
• float — 32-битовое значение числа с плавающей точкой (IEEE 754),
• double — 64 битовое значение числа с плавающей точкой (IEEE 754).
По умолчанию short, int, long и long long — типы данных со знаком, т.е. они могут содержать как отрицательные, так и положительные значения. Если необходимо хранить только неотрицательные целые числа, мы можем поставить ключевое слово unsigned (без знака) перед типом. Если тип short может хранить любое значение в промежутке между —32,768 и +32,767, то unsigned short — от 0 до 65 535. Оператор сдвига вправо >> имеет семантику чисел без знака («заполнить нулями»), если один из операндов является типом без знака.
Тип bool может принимать значения true и false. Кроме того, числовые типы могут использоваться вместо типа bool; в этом случае 0 соответствует значению false, а любое ненулевое значение означает true.
Тип char используется для хранения как символов ASCII, так и 8-битовых целых чисел (байтов). Целое число, представленное этим типом, в зависимости от платформы может иметь или не иметь знак. Типы signed char и unsigned char могут использоваться для однозначной интерпретации типа char. Qt предоставляет тип QChar, который хранит 16-битовые символы в кодировке Unicode.
По умолчанию экземпляры встроенных типов не инициализируются. Когда создается переменная типа int, ее значение вполне могло бы быть нулевым, однако с той же вероятностью оно может равняться —209 486 515. К счастью, большинство компиляторов предупреждает нас о попытках чтения неинициализированной переменной, и мы можем использовать такие инструментальные средства, как Rational PurifyPlus и Valgrind, для обнаружения обращений к неинициализированной памяти и других связанных с памятью проблем на этапе выполнения.
В памяти числовые типы (кроме long) имеют идентичные размеры на различных платформах, поддерживаемых Qt, но их представление меняется в зависимости от принятого в системе порядка байтов. В архитектурах с прямым порядком байтов (например, PowerPC и SPARC) 32-битовое значение 0x12345678 последовательно занимают четыре байта 0х12 0x34 0x56 0х78, в то время как в архитектурах с обратным порядком байтов (например, Intel x86) последовательность байтов будет обратной. Это следует учитывать в программах, копирующих области памяти на диск или посылающих двоичные данные по сети. Класс Qt QDataStream, представленный в главе 12 («Ввод—вывод»), можно использовать для хранения двоичных данных независимым от платформы способом.