在 C 11 中,引入 constexpr 作为函数的类型限定符引发了有关其与现有机制 inline 的关系的问题用于内联函数。本文研究了 constexpr 的含义以及它如何与内联交互。
C 11 标准明确指出“constexpr 函数和 constexpr 构造函数是隐式内联的”。这意味着使用 constexpr 作为函数说明符也会隐式设置内联说明符。因此,如果一个函数被声明为 constexpr,它的行为就好像它具有内联说明符。
这意味着如果将非常量参数传递给对于 constexpr 函数,编译器仍会尝试内联该函数,就像它被声明为内联一样。这是因为 constexpr 函数需要满足某些适合内联的标准,例如简单且不递归。
但是,需要注意的是,内联函数说明符对单一定义规则 (ODR) 的影响比对内联本身的影响更大。具有不同内联限定符的函数可以有多个定义,而 constexpr 函数与内联函数一样,必须有一个定义。
虽然 constexpr 函数隐式暗示内联,但内联说明符的影响有限关于内联决策。编译器最终会根据各种因素(包括函数的大小和复杂性)来决定是否内联函数。 Constexpr 函数最初设计为适合内联,但随后的放宽允许使用更复杂的 constexpr 函数。
以上是C 11 中 `constexpr` 如何与 `inline` 交互?的详细内容。更多信息请关注PHP中文网其他相关文章!