静态constexpr与函数体内的constexpr有什么区别?

6

在函数体内部使用 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;
}

2
这个函数内或者任何函数内都有区别吗?constexpr变量表现出一定的特性,static变量也是如此。 - Drew Dormann
我正在寻找这个函数内部的任何差异。因为我猜想,如果它们在编译时执行的constexpr函数中声明,那么一切都会不同。 - Caglayan DOKME
1个回答

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接