In C 11 warf die Einführung von constexpr als Typqualifizierer für Funktionen Fragen zu seiner Beziehung zu Inline, einem vorhandenen Mechanismus, auf für Inlining-Funktionen. Dieser Artikel untersucht die Auswirkungen von constexpr und wie es mit Inline interagiert.
Der C 11-Standard besagt ausdrücklich, dass „constexpr-Funktionen und constexpr-Konstruktoren implizit inline sind“. Das bedeutet, dass die Verwendung von constexpr als Funktionsspezifizierer implizit auch den Inline-Spezifizierer festlegt. Wenn eine Funktion daher als constexpr deklariert wird, verhält sie sich so, als ob sie den Inline-Spezifizierer hätte.
Dies impliziert, dass ein nicht konstantes Argument übergeben wird Wenn Sie eine constexpr-Funktion verwenden, versucht der Compiler weiterhin, die Funktion so einzubinden, als ob sie inline deklariert wäre. Dies liegt daran, dass constexpr-Funktionen bestimmte Kriterien erfüllen müssen, die sie für das Inlining geeignet machen, z. B. dass sie einfach und nicht rekursiv sind.
Es ist jedoch wichtig zu beachten, dass die Inline Der Spezifizierer hat einen größeren Einfluss auf die One Definition Rule (ODR) als auf das Inlining selbst. Funktionen mit unterschiedlichen Inline-Qualifizierern können mehrere Definitionen haben, während Constexpr-Funktionen wie Inline-Funktionen eine einzige Definition haben müssen.
Während Constexpr-Funktionen implizit Inline implizieren, hat der Inline-Spezifizierer nur begrenzte Auswirkungen zu Inlining-Entscheidungen. Der Compiler entscheidet letztendlich anhand verschiedener Faktoren, einschließlich seiner Größe und Komplexität, ob eine Funktion integriert werden soll. Consexpr-Funktionen waren ursprünglich so konzipiert, dass sie für Inlining geeignet sind, spätere Lockerungen haben jedoch komplexere Constexpr-Funktionen ermöglicht.
Das obige ist der detaillierte Inhalt vonWie interagiert „constexpr' mit „inline' in C 11?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!