2014-12-24 6 views
11

Es ist so etwas, und es ist in dem aktuellen C++ Entwurf:Was ist eine externe Inline-Funktion und wann?

Zu § 7.1.2 0,4:

Eine Inline-Funktion ist in der in jeder Übersetzungseinheit definiert werden, es ist odr verwendet und muss in jedem Fall genau dieselbe Definition haben (3.2). [Hinweis: Ein Aufruf der Inline-Funktion ist möglicherweise vor der Definition in der Übersetzungseinheit aufgetreten. - Endnote] Wenn die Definition einer Funktion in einer Übersetzungseinheit vor ihrer ersten Deklaration als Inline angezeigt wird, ist das Programm schlecht formatiert. Wenn eine Funktion mit externer Verknüpfung inline in einer Übersetzungseinheit deklariert ist, wird sie in allen Übersetzungseinheiten, in denen sie erscheint, als inline deklariert; ist keine Diagnose erforderlich. Eine Inline-Funktion mit externer Verknüpfung soll in allen Übersetzungseinheiten die gleiche Adresse haben. Eine statische lokale Variable in einer externen Inline-Funktion verweist immer auf das gleiche Objekt. Ein im Rumpf einer externen Inline-Funktion definierter Typ ist der gleiche Typ in jeder Übersetzungseinheit.

Einige Einsichten, was ist das und wann es zu verwenden?

+0

Vielleicht ein Link-Zeit-Optimierung Hinweis? – leppie

Antwort

3

extern ist redundant für Funktionen, so dass es sinnlos ist, eine Funktion extern inline zu deklarieren. Wenn Sie beispielsweise im globalen Gültigkeitsbereich eine Funktion inline deklariert haben, gelten die Regeln dieses Abschnitts. Dies gilt auch, wenn Sie eine Klasse im globalen Gültigkeitsbereich deklariert und eine Memberfunktion innerhalb der Klassendefinition definiert haben, da eine solche Funktion implizit inline wäre.

Die Frage, wann Sie eine Funktion deklarieren sollten inline ist eine Dose Würmer, die ich hier nicht öffnen möchte. Siehe: When should I write the keyword 'inline' for a function/method?

+0

'statisch' könnte erwähnenswert sein. – Yakk

Verwandte Themen