函数体中的静态constexpr vs constexpr?

static constexpr vs constexpr in function body?

static constexprconstexpr 在函数体内使用时有什么区别吗?

int SomeClass::get(const bool b) 
{
    static constexpr int SOME_CONSTANT = 3;
    constexpr int SOME_OTHER_CONSTANT = 5;

    if(b)
        return SOME_CONSTANT;
    else
        return SOME_OTHER_CONSTANT;
}

这两个声明之间的主要区别在于对象的生命周期。在写问题时,我认为使用 constexpr 而不是 const 会将该对象放入 .rodata 部分。但是我错了。 constexpr 关键字,这里只规定对象可以在编译时函数中使用。因此,该对象实际上是在 运行 时间内在堆栈中创建的,并在离开函数体时销毁。 另一方面,static constexpr 对象是放置在 .rodata 部分中的对象。它是在我们第一次调用包装函数时创建的。此外,由于 constexpr,它在编译时也可用。