当前位置:  开发笔记 > 编程语言 > 正文

为什么GCC在编译时不评估constexpr?

如何解决《为什么GCC在编译时不评估constexpr?》经验,为你挑选了1个好方法。

举个例子:

class something {
public:
  static constexpr int seconds(int hour, int min, int sec)
  { return hour*3600+min*60+sec; }
}

然后:

printf("Look at the time: %d\n", something::seconds(10, 0, 0));

将编译为使用g ++调用函数,而不是使用常数.为什么g ++会这样做?它没有任何好处,有点挫败了使用constexpr而不是糟糕的宏的目的.



1> Barry..:

为什么g ++会这样做?

constexpr在将结果用作常量表达式的情况下,必须在编译时评估函数.这些包括初始化constexpr变量和用作模板参数.

在其他情况下,即使constexpr使用自身都是常量表达式的参数调用函数,也可以由实现来执行它想要的操作.通常,它将取决于优化标志.例如,在gcc 6.2和clang 3.9.1上,-O0将在运行时发出一个调用,但-O1会发出常量36000.

推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有