constexpr暗示内联?

考虑下面的内联函数:

// 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说明符的意义上说,如果一个非常量parameter passing给constexpr函数,编译器将尝试inline函数,就好像inline说明符被放在它的声明?

C ++ 11标准是否可以保证?

是(§7.1.5/ 2):“constexpr函数和constexpr构造函数隐式内联(7.1.2)”。

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

我还要补充一点,不pipeconstexpr意味着inlineconstexpr函数的规则要求它们足够简单,以至于它们通常是内联扩展的好select(主要的例外是那些recursion的)。