Статьи

Учебные материалы по языку C++ — от основ до продвинутых тем

Современный C++: auto, nullptr, range-for и structured bindings

Страница 39 из 43 · 2026-10-25 · 1 мин чтения

Современный C++: auto, nullptr, range-for и structured bindings

auto

auto просит компилятор вывести тип из инициализатора:

auto count = 10;       // intconst auto ratio = 0.5; // const double

Используй его, когда тип очевиден из правой части или слишком громоздок, но не скрывай важный смысловой тип без причины.

nullptr

Для нулевого указателя используй nullptr, а не целочисленный 0 или макрос NULL:

int* ptr = nullptr;

nullptr имеет собственный тип и лучше участвует в разрешении перегрузок.

range-based for

for (const auto& item : items) {    Process(item);}

Цикл по диапазону удобнее ручного счётчика, когда нужен каждый элемент контейнера.

Инициализация фигурными скобками

int count{10};std::vector<int> values{1, 2, 3};

Фигурная инициализация помогает избежать некоторых сужающих преобразований, но у контейнеров может означать список элементов, а не размер. Например, std::vector<int> a(5) создаёт пять элементов, а std::vector<int> b{5} — один элемент со значением 5.

Structured bindings (C++17)

std::pair<int, std::string> result{200, "OK"};auto [code, message] = result;

Можно распаковывать пары, кортежи и подходящие структуры. Добавь auto& или const auto&, если нужна ссылка на исходные данные.

constexpr

constexpr позволяет вычислять значения и функции во время компиляции, когда условия это допускают. Это полезно для констант и вычислений, которые действительно должны быть известны компилятору.

Итог

Современные возможности C++ помогают писать выразительнее, но не отменяют необходимости понимать типы, время жизни и стоимость копирования. Используй функции языка для повышения ясности, а не только ради сокращения кода.