Перейти к содержимому
Теория · Переменные и типы · урок 1 из 10

Встроенные типы и их размеры

Программа на C++ хранит данные в переменных (variables), и у каждой переменной есть тип. Тип задают при объявлении (declaration): он решает, какие значения переменная хранит и как они печатаются. Здесь true выводится как 1:

C++
#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):

C++
#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) — значение, записанное прямо в коде. Его тип компилятор определяет по записи:

ЛитералТип
10int
2.5double
2.5ffloat
'a'char
truebool

Число с точкой — это double, даже без дробной части: 2.0 тоже double. Суффикс f делает литерал float: 2.5f — это float, а не double. Разницу видно по sizeof:

C++
std::cout << sizeof(2.5) << ' ' << sizeof(2.5f) << '\n';  // 8 4

Частая ошибка

Символ записан в двойных кавычках:

C++
char grade = "A";  // ✗
TEXT
error: cannot initialize a variable of type 'char' with an lvalue of type 'const char[2]'

Это ошибка компиляции. Двойные кавычки создают текст из любого числа символов, а char хранит ровно один символ. Один символ пишут в одинарных кавычках: 'A'.