Home > Backend Development > C++ > Does `constexpr` Imply `inline` in C 11?

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

Susan Sarandon
Release: 2024-11-03 19:05:29
Original
1011 people have browsed it

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

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>
Copy after login

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!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template