gpt4 book ai didi

c++ - constexpr 是否暗示内联?

转载 作者:IT老高 更新时间:2023-10-28 12:02:08 26 4
gpt4 key购买 nike

考虑以下内联函数:

// Inline specifier version
#include<iostream>
#include<cstdlib>

inline int f(const int x);

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

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

和 constexpr 等效版本:

// Constexpr specifier version
#include<iostream>
#include<cstdlib>

constexpr int f(const int x);

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

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

我的问题是:constexpr 说明符是否暗示 inline 说明符,因为如果将非常量参数传递给 constexpr 函数,编译器将尝试 inline 函数,就好像 inline 说明符被放入其声明中一样?

C++11 标准是否保证?

最佳答案

是([dcl.constexpr],C++11 标准中的 §7.1.5/2):“constexpr 函数和 constexpr 构造函数是隐式内联的 (7.1.2)。”

但是请注意,inline 说明符对于编译器是否可能内联扩展函数的影响确实非常很小(如果有的话)。然而,它确实会影响一个定义规则,从这个角度来看,编译器需要遵循与 constexpr 函数和 inline 函数相同的规则。

我还应该补充一点,无论 constexpr 是否暗示 inline,C++11 中 constexpr 函数的规则都要求它们简单足以使它们通常是内联扩展的良好候选者(主要的异常(exception)是那些递归的)。然而,从那以后,规则变得越来越宽松,因此 constexpr 可以应用于更大、更复杂的函数。

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com