Использование constexpr, когда значение не является константным, но инициализируется константным выражением? - PullRequest
0 голосов
/ 30 октября 2018

Почему-то мне трудно понять, как правильно использовать constexpr.

Является ли описанная в названии ситуация подходящим местом для ее использования? то есть:

void foo()
{
    static constexpr const size_t MAX_BUFFER_SIZE = 20 * 1024 * 1024;

    constexpr size_t bufferSize = 1024 * 1024; // Initialized with constant expression
    std::vector<char> buffer(bufferSize, ' ');

    //...

    if (some_condition())
    {
        bufferSize = get_random_value_at_runtime(); // Assigned a new 'non-constexpr' value
        buffer.resize(bufferSize, ' ');
    }

    //...   
}

С уважением!

1 Ответ

0 голосов
/ 30 октября 2018

Является ли описанная в названии ситуация подходящим местом для ее использования?

Неправильно.

constexpr size_t bufferSize = 1024 * 1024; // Initialized with constant expression

// ...

    bufferSize = get_random_value_at_runtime(); 

constexpr подразумевает (также) const.

Невозможно переназначить переменную const.

...