Каждая переменная или выражение имеет свой тип данных, например, объявление
int some_variable;
указывает, что переменная some_variable имеет целочисленный тип int.
Объявление позволяет ввести некую переменную в программу. Данная переменная будет обладать неким типом данных: целочисленный, с плавающей запятой, символьный в случае базовых типов данных, или кастомный тип (структура данных, класс). Тип переменной определяет набор операций, которые можно произвести над переменной. Объявление переменной определяет выделение области памяти, которая требуется для неё. А также значение этой переменной, которое с точки зрения компьютера будет являться последовательностью битов. Объявление переменной также несёт в себе то имя, по которому программист будет обращаться к данной переменной в программном коде.
В выше приведенном примере имеем переменную, которая имеет базовый целочисленный тип, с которыми могут производиться арифметические действия, действия сравнения, присваивания и т.д. Обращаться в программном коде к этой переменной будем по имени some_variable.
Фундаментальные типы данных
C++ предоставляет следующие фундаментальные типы данных.
void
void - является типом данных с пустым набором значений. Является незавершённым и не может быть установлен для объектов и переменных. Однако, позволяется использовать указатели на тип void, а также использовать void в качестве значения, возвращаемого функциями.
nullptr
nullptr - особый тип данных, который сам себе не является типом как таковым, поскольку его нельзя установить в качестве типа переменной, но он может использоваться в качестве нулевого указателя. Данный тип был введён в стандарте С++11 вместо определяемой реализацией нулевой макроконстанты NULL.
boolean
bool - логический тип данных, которые принимает значение true или false . Размер памяти, которую занимает данный тип данных может отличаться от 1 в зависимости от реализации в целевой системе. Определить размер можно с помощью оператора sizeof(bool).
Символьные типы
char - Символьные типы используются для представления текстовых символов. Размер символьного типа char 1 байт, что позволяет содержать 256 различных символов. Представление всех символов можно найти в таблице символов ASCII.
Символьные типы данных делятся на три типа:
- signed char - знаковый тип
- unsigned char - беззнаковый тип
- char - отдельный тип, который может быть как знаковым, так и беззнаковым, в зависимости от того, как отработает код компилятор.
Различие в диапазоне значений, например:
- char -128...127
- unsigned char 0...255
char может использоваться для хранения целочисленных значений, которые не превышают одного байта, но лучше использовать для целочисленных значений всё-таки тип Int. Но такое допустимо для встраиваемых систем, с жёстко ограниченным объёмом памяти.
Также имеются особые типы символьных данных:
- wchar_t - тип для представления символов, которым недостаточно одного байта. Это может быть 32 бита для ОС, поддерживающих UNICODE, или 16 бит в нотации Windows для UTF-16.
- char16_t - тип для представления UTF-16, введён в стандарте C++11 .
- char32_t - тип для представления UTF-32, введён в стандарте C++11 .
int
int - целочисленный тип данных. Могут использоваться модификаторы, определяющие размер памяти, выделяемый под этот тип данных. Если нет модификаторов, то гарантируется, что размер типа данных не менее 16-ти бит. Однако, на большинстве 32/64 разрядных систем гарантируется, что занимаемый размер не менее 32-х бит.
Модификаторы
Знаковые модификаторы
- signed - представление знакового типа данных (если опущено, то подразумевается по умолчанию)
- unsigned - представление беззнакового типа данных.
Модификаторы размера
- short - целевой тип оптимизируется, чтобы размер был не менее 16 бит
- long - целевой тип оптимизируется, чтобы размер был не менее 32 бит
Модификатор long можно применять к типу данных дважды, что даёт оптимизацию занимаемого переменной пространства не менее 64 бит. Данная оптимизация введена в стандарте C++11.
long long int
Модификаторы размера и знаковости можно также комбинировать.
signed long long int
Типы данных с плавающей точкой
- float - 32-х разрядный тип данных с плавающей точкой.
- double - 64-х разрядный тип данных с плавающей точкой.
- long double - расширенный тип данных с плавающей точкой, введён в стандарте C++11.
Кстати, при разработке программного обеспечения можно заметить по использованию этих типов данных, какой разработчик начинал с чистого C, а какой начинал с C++. Поголовное использование float характерно для разработчиков, которые начинали с C, double же характерен для C++ разработчиков.
Переменные
Таким образом, переменные могут иметь типы данных, перечисленные выше, например:
int a = 12; // Целочисленный тип, переменная равна 12 double b = 12.25; // Вещественный тип с плавающей точкой двойной точности, переменная равна 12.25 char c = 'a'; // Символьный тип, переменная равна символу "a"
Инициализация переменных может производиться несколькими способами.
double a1 = 2.3; double a2 = {2.3}; double a3 {2.3};
Инициализация с фигурными скобками была введена в стандарте C++11. При инициализации фигурными скобками не позволяется неявное преобразование, поэтому компилятор выдаст ошибку в следующих случаях.
int d1 = {2.3}; int d2 {2.3};
auto
Также для объявления переменных в стандарте C++11 был введён спецификатор auto , который позволяет объявлять переменную, без указания типа. В данном случае тип выводится из инициализатора, то есть значения, которое будет присвоено переменной. Таким образом auto невозможно использовать без инициализатора, то есть
// Правильный, рабочий вариант auto a = 14; // Не правильный вариант, не скомпилируется auto b; b = 15;
Спецификатор auto может использоваться для объявления лямбда функций, или переменных с очень сложным объявлением, что ведёт к упрощению программного кода.
Арифметика
Над переменными базовых типов можно выполнять различные арифметически операции:
x+y // сложение +x // унарный плюс x-y // вычитание -x // унарный минус x*y // умножение x/y // деление x%y // остаток от деления
Также возможно использование операций сравнение:
x==y // равно x!=y // не равно x<y // меньше чем x>y // больше чем x<=y // меньше чем или равно x>=y // больше чем или равно
В дополнение к арифметическим и логическим операциям функционал C++ предлагает более специфические операции:
x+=y // x = x+y ++x // increment: x = x+1 x−=y // x = x-y −−x // decrement: x = x-1 x∗=y // x =x*y x/=y // x = x/y x%=y // x = x%y
Переменная аuto доступна для использования в Qt?
Да, доступна. Только нужно использовать стандарт C++11, но насколько помню, Вы используете устаревшие стандарты C++, поэтому у вас вряд ли она будет работать.