Daily bit(e) C++. Выражения инициализации
Добавлено 30 сентября 2026 в 13:34
Daily bit(e) C++ 125, выражения инициализации в if и switch (C++17) и в цикле for на основе диапазонов (C++20).

Выражения инициализации позволяют полностью инкапсулировать конструкции if, switch (C++17) и цикл for на основе диапазонов (C++20) за счет добавления дополнительной секции инициализации, в которой можно создавать переменные, время жизни которых ограничено блоком данного выражения.
#include <string>
#include <optional>
std::optional<int> some_call()
{
return 10;
}
int other_call()
{
return 10;
}
// C++17
if (auto result = some_call(); result.has_value())
{
int v = *result;
}
// C++17
switch (auto val = other_call(); val)
{
case 1: // дальнейшая обработка val
break;
case 2: //дальнейшая обработка val
break;
default:
;
}
// C++20 / Обеспечивает возможность итерации по временным диапазонам.
for(std::string v = std::to_string(42); auto c : v)
{
// v - допустимый диапазон, по которому можно безопасно выполнить итерацию
}
