Краткое содержание
Тип задаёт не только то, сколько байтов занимает значение, но и то, как читаются его биты: один и тот же байт есть буква «A» для char и число 65 для int. Этот урок дополняет основные типы символами и логическими значениями и изучает переход от одного типа к другому: неявные преобразования, которые компилятор выполняет, не дожидаясь просьбы, и которые могут терять информацию; явное преобразование с помощью static_cast; инициализацию фигурными скобками, которая отвергает потери. Завершают урок константы, const и constexpr, превращающие намерение («это значение не меняется») в гарантию, которую обеспечивает компилятор, а также литералы и auto, определяющие тип значения, записанного в исходном коде.
Цели обучения
- Использовать числовой код символа для вычислений, например чтобы получить значение цифры, прочитанной как символ.
- Предсказывать результат неявного преобразования между целыми, вещественными и логическими значениями и записывать явное преобразование с помощью
static_cast. - Объяснять, почему инициализация фигурными скобками отвергает преобразования, теряющие информацию, и что делает GCC в каждом случае.
- Объявлять с
constилиconstexprкаждое значение, которое не должно меняться, и отличать одно слово от другого. - Выводить тип литерала (
5,5u,5.0,5.0f,'5',"5") и тот тип, который ему назначаетauto.
Тип как способ прочтения
Урок Переменные и память представил переменную как ячейку памяти с именем, типом и значением, а уроки Целые числа и их представление и Числа с плавающей точкой показали, что в ячейке лежат не числа, а биты, и что тип говорит, как их читать. Этот урок доводит эту мысль до её следствия: если тип есть правило чтения, то одни и те же биты означают разное в зависимости от типа, с которым их читают, а перевод значения из одного типа в другой, который в C++ называется преобразованием, означает смену правила. Одни преобразования сохраняют значение (целое 7 превращается в вещественное 7.0 без всяких потерь); другие его искажают (вещественное 2.7 превращается в целое 2). Отсюда вопрос, проходящий через весь урок: сохраняется ли значение при каждом преобразовании, и кто за этим следит?
Загрузка содержимого…