c++ - 内联与 constexpr?

标签 c++ optimization c++11 inline constexpr

对于新的 C++11 标准,我什么时候应该在 constexpr 关键字上使用 inline 关键字? constexpr 关键字是否提供了对 inline 的任何额外优化,还是仅仅断言必须在编译时计算?

为什么 constexpr 在某些调用不是常量的情况下可以在 GCC 上工作,例如在非 constexpr< 上调用 foo(x)/变量?这是 GCC 中的错误还是实际上是标准的一部分?

最佳答案

断言可以在编译时计算某些东西一种非常强大的优化。

内联只是通过将函数体复制/粘贴到调用站点来删除函数调用。函数体还是要执行的,只是省了函数调用的开销。

但如果您在编译时评估相同的代码,它在运行时是免费的

但是 inlineconstexpr 都不是主要关于优化的。 inline 的主要目的是抑制 one-definition-rule,以便可以在 headers 中定义函数(这对模板很有用,顺便说一下,也使内联优化更容易)

constexpr 之所以存在,是因为它在元编程中很有用,顺便说一下,它可以帮助编译器更好地优化代码,将更多的计算转移到编译时。

关于c++ - 内联与 constexpr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7113872/

相关文章:

c++ - 类构造函数、析构函数和运算符重载的实用函数

c++ - 接受整数主参数然后使用它们来声明一个数组,常数问题?

c++ - 如何有效地调试 constexpr 函数?

c++ - 如何清除 cin 中的无关字符?

C++ 如何创建/使用管道和 fork ?

mysql - 针对表 4.000.000 条记录优化 Mysql

mysql - MySQL中的eq_ref和ref类型是什么意思解释

python - 与 SciPy.optimize 的并行性

c++ - 我可以在 lambda 捕获子句中声明一个变量吗?

c++ - 在 C++ 中,有没有办法在编译时更改函数原型(prototype)?