Инициализация константных переменных

В Rust мне сразу понравилась возможность присваивать переменным результат оператора if. Подобных функционал очень полезен для инициализации константных переменных без введения дополнительных функций.

fn main() {
    let someFlag = false;
    let value = if someFlag {
        -1
    } else {
        1
    };
    io::println(fmt!("value == %d", value))
}

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

int main() {
    bool someFlag = false;
    const auto value = [&]{
        if(someFlag)
            return -1;
        else
            return 1;
    } ();
    std::cout << "value == " << value << std::endl;
    return 0;
}

Ну и конечно не забываем про то, что это C++11

 > clang++ -std=c++11 test.cpp

P.S. подсмотренно у Саттера.

2 Comments Инициализация константных переменных

  1. serge

    #include

    int main()
    {
    int const a = 10;
    bool const f = false;
    int const i = f? (a + 1): (a – 1);
    std::cout << i << std::endl;
    return 0;
    }

    Reply

Leave a Reply