C ++编译器优化-为什么需要constexpr?

时间:2019-01-07 04:38:55

标签: c++ c++11 compilation compiler-optimization constexpr

我想知道为什么constexpr的优点没有被编译器优化?

编译器应该能够推断出一个值在编译时比人类更好(例如,如果对函数调用的所有输入都是已知的),那么它就应该能够将该值标记为已知后续分析,直到变得模棱两可为止。那么为什么要在这种情况下必须手动告诉编译器(而不是只使用const关键字,而是让编译器在编译时评估值)。

这是因为编译器技术尚无法执行此操作,还是因为某种固有的限制因素导致编译器无法这样做?

1 个答案:

答案 0 :(得分:1)

如果省略constexpr,则编译器很可能仍可以在编译时计算该值。

主要思想是,您可以告诉编译器您想要在编译时进行评估的内容,这样,当您犯错时,编译器会发出错误,并使用编译时无法评估的内容。 / p>

显然,它还允许在只允许使用编译时间常数(如数组大小)的地方使用这些值。