Встроенные типы и их размеры
Программа на C++ хранит данные в переменных (variables), и у каждой переменной есть тип. Тип задают при объявлении (declaration): он решает, какие значения переменная хранит и как они печатаются. Здесь true выводится как 1:
#include <iostream>
int main() {
int count = 3;
double price = 2.5;
char grade = 'A';
bool ready = true;
std::cout << count << ' ' << price << '\n'; // 3 2.5
std::cout << grade << ' ' << ready << '\n'; // A 1
}Объявление int count = 3; создаёт переменную — именованное место в памяти. У неё тип int, имя count и начальное значение 3. Дальше в программе имя означает это значение: std::cout << count печатает 3. Тип переменной после объявления не меняется.
Основные типы
Четыре типа встречаются почти в каждой программе:
int— целое число:42,-7,0;double— число с дробной частью:2.5,-0.1;char— один символ в одинарных кавычках:'A','7';bool— логическое значениеtrueилиfalse;std::coutпечатает их как1и0.
Реже нужны ещё два типа. long long хранит целые числа, которые не помещаются в int, а float — дробные числа с меньшей точностью, чем у double. Есть и целые типы short и long: short не длиннее int, а long не короче.
Размер в байтах
Каждый тип занимает в памяти определённое число байт, и от него зависит, какие значения поместятся в переменную. Размер показывает sizeof. Стандарт C++ точно задаёт только sizeof(char): он всегда равен 1. Остальные размеры зависят от платформы и компилятора (compiler):
#include <iostream>
int main() {
std::cout << sizeof(char) << ' ' << sizeof(int) << '\n'; // 1 4
std::cout << sizeof(long long) << ' ' << sizeof(double) << '\n'; // 8 8
}Так эта программа печатает на обычном компьютере и в задачах курса. В четыре байта int помещаются числа примерно до двух миллиардов, а для больших берут long long.
Тип литерала
Литерал (literal) — значение, записанное прямо в коде. Его тип компилятор определяет по записи:
| Литерал | Тип |
|---|---|
10 | int |
2.5 | double |
2.5f | float |
'a' | char |
true | bool |
Число с точкой — это double, даже без дробной части: 2.0 тоже double. Суффикс f делает литерал float: 2.5f — это float, а не double. Разницу видно по sizeof:
std::cout << sizeof(2.5) << ' ' << sizeof(2.5f) << '\n'; // 8 4Частая ошибка
Символ записан в двойных кавычках:
char grade = "A"; // ✗error: cannot initialize a variable of type 'char' with an lvalue of type 'const char[2]'Это ошибка компиляции. Двойные кавычки создают текст из любого числа символов, а char хранит ровно один символ. Один символ пишут в одинарных кавычках: 'A'.