C++ 何时将局部变量声明为非静态constexpr有益/必需?

C++ 何时将局部变量声明为非静态constexpr有益/必需?,c++,static,constexpr,compile-time-constant,C++,Static,Constexpr,Compile Time Constant,尽管阅读了一些StackOverflow文章(and)和cppreference页面,但我无法理解非静态的constepr局部变量与static constepr局部变量相比有什么好处 我能看到的唯一区别是,每个调用都有自己的实例,但由于它是constepr,我看不出这里的实际优势(因为,如果我理解正确,这会导致每个实例都是相同的和不可变的,使得多个实例只是冗余的) 或者,从另一个角度进行论证:由于非静态的constepr局部变量在(每次)函数调用时都会初始化,因此简单的const局部变量没有任

尽管阅读了一些StackOverflow文章(and)和cppreference页面,但我无法理解非静态的
constepr
局部变量与
static constepr
局部变量相比有什么好处

我能看到的唯一区别是,每个调用都有自己的实例,但由于它是
constepr
,我看不出这里的实际优势(因为,如果我理解正确,这会导致每个实例都是相同的和不可变的,使得多个实例只是冗余的)

或者,从另一个角度进行论证:由于非静态的
constepr
局部变量在(每次)函数调用时都会初始化,因此简单的
const
局部变量没有任何优势,尽管它可以用于编译时计算。但是当编译时评估需要它们时,没有必要让它们不是静态的


所以我的问题是:我的参数有什么缺陷,在什么情况下,非静态的
constexpr
局部变量是合理的,可能是最佳选择?

这与实际的观点没有区别。请记住,自C++11以来,静态变量保证具有线程安全的初始化。这意味着每次调用该函数时,它们都将花费您的成本,因为它需要进行检查以查看是否已初始化。一个非静态的constexpr变量只会增加堆栈(如果它能尽可能优化的话),这是非常便宜和快速的。答案的最后一段给出了一些不使用
static
@WernerHenzeyes的提示,谢谢。我确实读过,但对我来说,这还不够令人信服,不足以让我仍然感到疑惑。@NathanOliver这种情况对我来说似乎很特殊。我在寻找更“普通”的东西。当然,你的观点是正确的。