Does Constexpr Imply Inline in C 11?
The C 11 standard introduces the constexpr specifier, which allows functions and variables to be evaluated at compile time. This has led to some confusion about the relationship between constexpr and inline.
The inline specifier instructs the compiler to perform inline expansion of a function. This means that the function's code will be inserted directly into the code where the function is called, rather than creating a separate function that is called indirectly.
The constexpr specifier does not explicitly imply the inline specifier. However, the C 11 standard states that "constexpr functions and constexpr constructors are implicitly inline" (§7.1.5/2).
Implications
This means that the compiler is required to follow the same rules for a constexpr function as it would for an inline function. In particular, the compiler may inline the function, even if it is called with non-constant arguments.
Example
Consider the following example:
<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>
In this example, the f function is inlined, even though it is called with a non-constant argument. This is because the f function is declared as inline.
Conclusion
The constexpr specifier does not explicitly imply the inline specifier. However, the C 11 standard requires compilers to behave as if constexpr functions are inline functions. This means that a compiler can safely inline a constexpr function, even if it is called with non-constant arguments.
The above is the detailed content of Does `constexpr` Imply `inline` in C 11?. For more information, please follow other related articles on the PHP Chinese website!