首页  >  文章  >  后端开发  >  在 C 11 中,“constexpr”是否意味着“内联”?

在 C 11 中,“constexpr”是否意味着“内联”?

Susan Sarandon
Susan Sarandon原创
2024-11-03 19:05:29938浏览

Does `constexpr` Imply `inline` in C  11?

Constexpr 在 C 11 中是否意味着内联?

C 11 标准引入了 constexpr 说明符,它允许在以下位置计算函数和变量:编译时间。这导致了对 constexpr 和 inline 之间关系的一些混淆。

inline 说明符指示编译器执行函数的内联扩展。这意味着函数的代码将直接插入到调用该函数的代码中,而不是创建一个间接调用的单独函数。

constexpr 说明符没有显式暗示内联说明符。然而,C 11 标准规定“constexpr 函数和 constexpr 构造函数是隐式内联的”(§7.1.5/2)。

含义

这意味着编译器需要遵循与内联函数相同的 constexpr 函数规则。特别是,即使使用非常量参数调用函数,编译器也可能内联该函数。

示例

考虑以下示例:

<code class="cpp">#include <iostream>
#include <cstdlib>

inline int f(const int x)
{
    return 2*x;
}

int main(int argc, char* argv[])
{
    return f(std::atoi(argv[1]));
}</code>

在此示例中,f 函数是内联的,即使它是使用非常量参数调用的。这是因为 f 函数被声明为内联。

结论

constexpr 说明符并未显式暗示内联说明符。但是,C 11 标准要求编译器的行为就像 constexpr 函数是内联函数一样。这意味着编译器可以安全地内联 constexpr 函数,即使它是使用非常量参数调用的。

以上是在 C 11 中,“constexpr”是否意味着“内联”?的详细内容。更多信息请关注PHP中文网其他相关文章!

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