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中文网其他相关文章!