Кожна змінна або вираз має свій тип даних, наприклад оголошення
int some_variable;
вказує, що змінна some_variable має цілий тип int.
Оголошення дозволяє ввести певну змінну програму. Ця змінна матиме певний тип даних: цілісний, з плаваючою комою, символьний у разі базових типів даних, або кастомний тип (структура даних, клас). Тип змінної визначає набір операцій, які можна зробити над змінною. Оголошення змінної визначає виділення області пам'яті, яка потрібна для неї. Також значення цієї змінної, яке з погляду комп'ютера буде послідовністю бітів. Оголошення змінної також несе у собі те ім'я, яким програміст буде звертатися до цієї змінної в програмному коді.
У наведеному вище прикладі маємо змінну, яка має базовий цілісний тип, з якими можуть вироблятися арифметичні дії, дії порівняння, привласнення і т.д. Звертатись у програмному коді до цієї змінної будемо на ім'я some_variable.
Фундаментальні типи даних
C++ надає такі фундаментальні типи даних.
порожня
void - є типом даних із порожнім набором значень. Є незавершеним і може бути встановлений для об'єктів і змінних. Однак, можна використовувати покажчики на тип void, а також використовувати void як значення, що повертається функціями.
nullptr
nullptr - особливий тип даних, який сам собі не є типом як таким, оскільки його не можна встановити як тип змінної, але він може використовуватися як нульовий покажчик. Цей тип був введений у стандарті С++11 замість реалізованої нульової макроконстанти NULL.
логічне значення
bool - логічний тип даних, що приймає значення true або false . Розмір пам'яті, яку займає даний тип даних, може відрізнятися від 1 в залежності від реалізації в цільовій системі. Визначити розмір можна за допомогою оператора sizeof(bool).
Символьні типи
char - Символьні типи використовуються для представлення текстових символів. Розмір символьного типу Char 1 байт, що дозволяє містити 256 різних символів. Подання всіх символів можна знайти у таблиці символів ASCII.
Символьні типи даних поділяються на три типи:
- signed char - знаковий тип
-
unsigned char
- беззнаковий тип
char - окремий тип, який може бути як знаковим, так і беззнаковим, залежно від того, як відпрацює код компілятора.
Відмінність у діапазоні значень, наприклад:
- char -128...127
- непідписаний символ 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 - цілісний тип даних. Можуть використовуватися модифікатори, що визначають розмір пам'яті, що виділяється для цього типу даних. Якщо немає модифікаторів, то гарантується, що розмір типу даних не менше 16 біт. Однак, на більшості 32/64 розрядних систем гарантується, що розмір не менше 32-х біт.
Модифікатори
Знакові модифікатори
- signed - представлення знакового типу даних (якщо опущено, то мається на увазі за умовчанням)
- unsigned - представлення беззнакового типу даних.
Модифікатори розміру
- short - цільовий тип оптимізується, щоб розмір був не менше 16 біт
- long - цільовий тип оптимізується, щоб розмір був не менше 32 біт
Модифікатор long можна застосовувати типу даних двічі, що дає оптимізацію займаного змінної простору щонайменше 64 біт. Ця оптимізація введена у стандарті C++11.
long long int
Модифікатори розміру та знаковості можна також комбінувати.
підписаний довгий довгий 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};
авто
Також для оголошення змінних у стандарті 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++, поэтому у вас вряд ли она будет работать.