Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

extern-inline Funktionen

&pagelevel(4)&pagelevel

In den Sprachmodi C++ 2017 und C++ 2020 unterstützt der Compiler extern-inline Funktionen (siehe auch extern inline vs. static inline"). Diese haben eine ähnliche Problematik wie die Templates: Es muss eine eindeutige Adresse geben. Der Compiler muss die Funktion also einem Modul zuordnen.

Die extern-inline Funktionen werden ähnlich behandelt wie Template-Einheiten. Für sie werden Einträge in der Instanziierungs-Informationsdatei angelegt. Die Automatische Instanziierung weist die Funktion einem Modul zu.

Das hat zur Folge, dass die Template-Instanziierung auch ablaufen muss, wenn keine Templates verwendet werden.

Die Möglichkeit der Inline-Expansion als Optimierung bleibt bestehen (siehe „Inline-Generierung von benutzereigenen Funktionen“ (Verlauf der Optimierung)). Diese Optimierung ist in allen Modulen möglich.

Gegenüber normalen Template-Einheiten ergeben sich die folgenden Unterschiede:

  • Die Pragmas instantiate, do_not_instantiate und can_instantiate können nicht für extern-inline Funktionen genutzt werden, die keine Templates sind.
  • Mit dem Pragma instantiate_inline kann das Modul bestimmt werden, dem die Funktion zugeordnet wird.
  • Das implizite Inkludieren ist nicht relevant. Alle benutzten Typen müssen deklariert worden sein, wie bei nicht-inline Funktionen auch.
  • Die syntaktische und semantische Prüfung erfolgt in jedem Modul, in dem die extern-inline Funktion definiert ist.
  • Zur Zeit (Version 4.0B03) werden extern-inline Funktionen nicht in den ETR-Dateien berücksichtigt.