当值是非常量但使用常量表达式初始化时使用constexpr吗?

时间:2018-10-30 14:36:03

标签: c++ c++11 constexpr

由于某种原因,我很难掌握如何正确使用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 :(得分:8)

  

标题中描述的情况是否适合使用?

错。

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

// ...

    bufferSize = get_random_value_at_runtime(); 

constexpr暗示(也是)const

您不能重新分配const变量。