c++ - constexpr 与 const : Will use a constexpr instead of const better help compile to optmize?

标签 c++ c++11 constants constexpr

使用 constexpr 而不是 const 会更好地帮助编译优化吗?我有一些不变的值(value)。我可以使用 enum 而不是,但它们并非都是同一类型,出于明显的原因我不想使用 #define。它们声明如下代码。我的问题是:如果我使用 constexpr 是否会增加编译器将其使用的值替换为文字常量值的可能性,或者如果我使用 const 则没有区别?我知道是否进行优化取决于每个编译器,但非常欢迎“一般”答案,因为它在大多数编译器中的行为。此外,假设结果对于像这样的简单本地人来说是不同的,如果他们不是 struct/class 的成员,那么结果也会不同吗?在这种情况下,const 折叠最难执行吗?

例如,

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

最佳答案

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

只需使用对您和任何其他从事代码工作的人而言更明确的含义,不仅在行为方面,而且在意图方面。

除其他事项外,请注意 constexpr 保证常量始终具有相同的值,而 const 允许每个常量具有不同的值达到初始化时间(当然,除非通过初始化,否则不能更改)。但是地球上几乎每个编译器都会确定,对于您的示例,这些值确实是常量。

还有一件事:即使禁用优化,constexpr 编译时评估(如模板参数计算)也是活跃的。

关于c++ - constexpr 与 const : Will use a constexpr instead of const better help compile to optmize?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22769338/

相关文章:

c++ - 为类型集专门化函数模板

c++ - 无法访问公共(public)静态变量成员

键和文件的 C++ 映射不起作用

java - 为什么 "final static int"可以用作开关的大小写常数,但不能用作 "final static <your enum>"

c++ - 从像素标签创建 RGB 图像

c++ - 使用cpp-httplib上传文件

c++ - Const 数据类型不能分配给非常量数据类型

vba - 打开Word文档运行时错误 '424' : Object required

c++ - 相同的输入但不同的方式输出不同的结果?

c++ - 检查 struct 的成员是否仅按字母顺序排列