Technisch bedeutet das Schlüsselwort inline
nur, dass die Definition in mehreren Übersetzungseinheiten zulässig ist. Das heißt, wenn Sie eine Inline-Funktion in einer Header-Datei definiert haben und diese in mehreren Quelldateien enthalten ist, dann ist das in Ordnung. Für eine Nicht-Inline-Funktion ohne Vorlage wäre dies illegal.
Compiler können und müssen jedoch den Vorteil nutzen, dass sie den Code der Funktion sehen können, die aufgerufen wird. Dies geschieht nicht nur für Inline-Funktionen, sondern auch für alle anderen Funktionen, deren Code sichtbar sein kann. Viele Compiler versuchen zu raten, ob der Code eingebunden werden soll. Wenn der Code inline ist, kann das Programm größer oder kleiner, schneller oder langsamer werden. Wenn der Compiler feststellen kann, dass der Code wahrscheinlich schneller und kleiner ist, wenn der Code inline ist, wird er es tun. Andernfalls muss der Kompromiss berücksichtigt werden.
Viele moderne Compiler können Link-Zeit-Optimierung, wo Code, der nicht inline zu beginnen mit inline in der Link-Phase, mit einigen Kosten in Link-Zeit. Es kann bestimmte Optimierungsmöglichkeiten geben, die verloren gehen, wenn sie bis zur Verbindungszeit verzögert werden.
In meiner eigenen Erfahrung habe ich festgestellt, dass kleine Funktionen inline zu machen in der Regel immer ein Gewinn für Größe und Geschwindigkeit ist. Bei größeren Funktionen sehe ich oft, dass die Programme schneller, aber größer werden, aber ich habe auch gesehen, dass es die Programme nur selten langsamer und größer macht. Wenn die Leistung einer bestimmten Funktion wichtig ist, müssen Sie Messungen durchführen, um zu entscheiden, ob Sie inline arbeiten oder nicht.
Wenn Sie eine Headerdatei einschließen, kopiert und fügt der Präprozessor den Code buchstäblich in den Code ein, in den Sie ihn eingefügt haben. – Andrew
Ich schlage vor, Sie werfen einen Blick über hier: http://programmers.stackexchange.com/questions/180904/are-header-files-actually-good –
'Inline' bedeutet meist nicht" machen diesen Code inline "in C++ Es hat mehr damit zu tun, wie man Kollisionen von Verbindungszeitnamen auflöst. "Code inline einfügen" hat im Kontext des C++ - Standards wenig Bedeutung. – Yakk