Heim >Backend-Entwicklung >C++ >Bedeutet „constexpr' „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!