函数体中的静态constexpr vs constexpr?
static constexpr vs constexpr in function body?
static constexpr
和 constexpr
在函数体内使用时有什么区别吗?
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
,它在编译时也可用。
static constexpr
和 constexpr
在函数体内使用时有什么区别吗?
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
,它在编译时也可用。