Daily bit(e) C++. Выражения инициализации

Добавлено 30 сентября 2026 в 13:34

Daily bit(e) C++ 125, выражения инициализации в if и switch (C++17) и в цикле for на основе диапазонов (C++20).

Daily bit(e) C++

Выражения инициализации позволяют полностью инкапсулировать конструкции 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 - допустимый диапазон, по которому можно безопасно выполнить итерацию
}

Пример на Compiler Explorer

Теги

C++ / CppDaily bit(e) C++Программирование