constexpr vs const:使用constexpr而不是const更好帮助编译优化?

时间:2014-03-31 18:26:58

标签: c++ c++11 const constexpr

使用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);
}

1 个答案:

答案 0 :(得分:3)

今天,constexpr仍然很新,可能会遇到一些优化问题。当然,需要在编译时执行变量自身值的计算。从长远来看,我希望每个人都有相同的优化机会。显然,当发生这种情况时,编译器是特定的。

只要使用对你和其他任何从事代码工作的人都有更清晰的意义,不仅在行为方面而且在意图方面。

除其他外,请注意constexpr保证常量具有相同的值始终,而const允许它在每次初始化时具有不同的值(它当然,除非通过初始化,否则无法更改。但是,地球上几乎每个编译器都会确定,对于你的例子,值确实是恒定的。

还有一件事:即使禁用了优化,constexpr编译时评估(如模板参数计算)仍处于活动状态。