使用constexpr而不是const更好的帮助编译来优化吗?我有一些不变的价值。我可以使用enum
代替它,但它们并非都是相同的类型,我不想因为明显的原因而使用#define
。它们声明如下代码。我的问题是:如果我使用constexpr
,它会增加编译器替换文字常量值所使用的值的可能性,或者如果我使用const
它没有区别吗?我知道这取决于每个编译器是否优化,而是一个“通用”答案,因为它在大多数编译器中都表现得非常受欢迎。另外,假设像这样的简单本地人的结果不同,如果他们不是struct/class
的成员,那也是不同的?在这种情况下,const折叠最难执行吗?
e.g,
int foo()
{
constexpr int x = 10;
constexpr int y = x * 3;
do_domsething(y + n);
}
与
int foo()
{
const int x = 10;
const int y = x * 3;
do_domsething(y + n);
}
答案 0 :(得分:3)
今天,constexpr
仍然很新,可能会遇到一些优化问题。当然,需要在编译时执行变量自身值的计算。从长远来看,我希望每个人都有相同的优化机会。显然,当发生这种情况时,编译器是特定的。
只要使用对你和其他任何从事代码工作的人都有更清晰的意义,不仅在行为方面而且在意图方面。
除其他外,请注意constexpr
保证常量具有相同的值始终,而const
允许它在每次初始化时具有不同的值(它当然,除非通过初始化,否则无法更改。但是,地球上几乎每个编译器都会确定,对于你的例子,值确实是恒定的。
还有一件事:即使禁用了优化,constexpr
编译时评估(如模板参数计算)仍处于活动状态。