Heim  >  Artikel  >  Backend-Entwicklung  >  Bedeutet „constexpr“ „inline“ in C 11?

Bedeutet „constexpr“ „inline“ in C 11?

Susan Sarandon
Susan SarandonOriginal
2024-11-03 19:05:29938Durchsuche

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

Bedeutet Consexpr Inline in C 11?

Der C 11-Standard führt den constexpr-Spezifizierer ein, der die Auswertung von Funktionen und Variablen ermöglicht Kompilierzeit. Dies hat zu einiger Verwirrung über die Beziehung zwischen constexpr und inline geführt.

Der Inline-Spezifizierer weist den Compiler an, eine Inline-Erweiterung einer Funktion durchzuführen. Dies bedeutet, dass der Code der Funktion direkt in den Code eingefügt wird, in dem die Funktion aufgerufen wird, anstatt eine separate Funktion zu erstellen, die indirekt aufgerufen wird.

Der constexpr-Spezifizierer impliziert nicht explizit den Inline-Spezifizierer. Der C 11-Standard besagt jedoch, dass „constexpr-Funktionen und constexpr-Konstruktoren implizit inline sind“ (§7.1.5/2).

Auswirkungen

Dies bedeutet, dass die Der Compiler muss für eine constexpr-Funktion dieselben Regeln befolgen wie für eine Inline-Funktion. Insbesondere kann der Compiler die Funktion einbinden, auch wenn sie mit nicht konstanten Argumenten aufgerufen wird.

Beispiel

Betrachten Sie das folgende Beispiel:

<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 diesem Beispiel ist die f-Funktion inline, auch wenn sie mit einem nicht konstanten Argument aufgerufen wird. Dies liegt daran, dass die f-Funktion als Inline-Funktion deklariert ist.

Schlussfolgerung

Der constexpr-Spezifizierer impliziert nicht explizit den Inline-Spezifizierer. Der C 11-Standard erfordert jedoch, dass sich Compiler so verhalten, als wären constexpr-Funktionen Inline-Funktionen. Dies bedeutet, dass ein Compiler eine constexpr-Funktion sicher einbinden kann, auch wenn sie mit nicht konstanten Argumenten aufgerufen wird.

Das obige ist der detaillierte Inhalt vonBedeutet „constexpr“ „inline“ in C 11?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn