首页  >  文章  >  后端开发  >  C 11 中 `constexpr` 如何与 `inline` 交互?

C 11 中 `constexpr` 如何与 `inline` 交互?

Barbara Streisand
Barbara Streisand原创
2024-11-04 05:42:02516浏览

How Does `constexpr` Interact with `inline` in C  11?

C 11 中的 Constexpr 和 Inline 函数

在 C 11 中,引入 constexpr 作为函数的类型限定符引发了有关其与现有机制 inline 的关系的问题用于内联函数。本文研究了 constexpr 的含义以及它如何与内联交互。

Constexpr 意味着内联

C 11 标准明确指出“constexpr 函数和 constexpr 构造函数是隐式内联的”。这意味着使用 constexpr 作为函数说明符也会隐式设置内联说明符。因此,如果一个函数被声明为 constexpr,它的行为就好像它具有内联说明符。

非常量参数的含义

这意味着如果将非常量参数传递给对于 constexpr 函数,编译器仍会尝试内联该函数,就像它被声明为内联一样。这是因为 constexpr 函数需要满足某些适合内联的标准,例如简单且不递归。

一个定义规则

但是,需要注意的是,内联函数说明符对单一定义规则 (ODR) 的影响比对内联本身的影响更大。具有不同内联限定符的函数可以有多个定义,而 constexpr 函数与内联函数一样,必须有一个定义。

结论

虽然 constexpr 函数隐式暗示内联,但内联说明符的影响有限关于内联决策。编译器最终会根据各种因素(包括函数的大小和复杂性)来决定是否内联函数。 Constexpr 函数最初设计为适合内联,但随后的放宽允许使用更复杂的 constexpr 函数。

以上是C 11 中 `constexpr` 如何与 `inline` 交互?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn