对于新的 C++11 标准,我什么时候应该在 constexpr
关键字上使用 inline
关键字? constexpr
关键字是否提供了对 inline
的任何额外优化,还是仅仅断言必须在编译时计算?
为什么 constexpr
在某些调用不是常量的情况下可以在 GCC 上工作,例如在非 constexpr< 上调用
变量?这是 GCC 中的错误还是实际上是标准的一部分?foo(x)
/
最佳答案
断言可以在编译时计算某些东西是一种非常强大的优化。
内联只是通过将函数体复制/粘贴到调用站点来删除函数调用。函数体还是要执行的,只是省了函数调用的开销。
但如果您在编译时评估相同的代码,它在运行时是免费的。
但是 inline
和 constexpr
都不是主要关于优化的。 inline
的主要目的是抑制 one-definition-rule,以便可以在 headers 中定义函数(这对模板很有用,顺便说一下,也使内联优化更容易)
而 constexpr
之所以存在,是因为它在元编程中很有用,顺便说一下,它可以帮助编译器更好地优化代码,将更多的计算转移到编译时。
关于c++ - 内联与 constexpr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7113872/