Es ist Zeitverschwendung, aus verschiedenen Gründen.
Das Inline-Schlüsselwort ist ein Hinweis, den der Compiler nach Belieben ignorieren kann. Genauso wie es kostenlos inline ist, auch wenn das Schlüsselwort nicht angegeben ist. Also, ob Sie es hinzufügen, wird wahrscheinlich nichts für den Compiler ändern
Darüber hinaus sind alle Funktionen innerhalb der Klassendefinition implizit inlined definiert. Aus diesem Grund werden kurze Funktionen wie Getter und Setter fast immer innerhalb der Klassendefinition definiert.
Als nächstes, wenn Sie eine Funktion als Inline markieren möchten, gibt es keinen Grund, dies auch nicht in Debug-Builds zu tun.
Das Schlüsselwort inline
hat fast nichts mit dem Compiler zu tun, der tatsächlich Funktionen inliniert. Sie sind getrennte Konzepte. Eine vom Programmierer mit inline
markierte Funktion bedeutet, dass der Linker sich keine Sorgen machen sollte, wenn er mehrere identische Definitionen sieht. Dies geschieht normalerweise, wenn die Funktion in einem Header definiert ist, der in mehrere Kompilierungseinheiten eingeschlossen wird. Wenn die Funktion inline markiert ist, führt der Linker die Definitionen zusammen. Wenn nicht, erhalten Sie einen Fehler. Mit anderen Worten verursacht das Hinzufügen und Entfernen dieses Schlüsselwortes Compilerfehler. Das ist wahrscheinlich nicht das, was du willst.Der einzige Grund, warum es ein bisschen Überlappung zwischen dem Schlüsselwort C++ inline
und der Compiler-Optimierung gibt, ist, dass wenn eine Funktion mit inline
markiert ist, es sicher in jeder Kompilierungseinheit enthalten ist, was bedeutet, dass die Definition immer sein wird sichtbar, wenn die Funktion aufgerufen wird. Und das macht es easire für den Compiler, um Aufrufe an die Funktion zu inline.
Schließlich ist Inlining nicht immer eine Leistungsverbesserung. Es ist leicht, eine Situation zu schaffen, in der Inlining nicht mehr als die Code-Größe zum Explodieren bringt, mehr Cache-Fehler verursacht und insgesamt den Code verlangsamt. Das ist einer der Gründe, warum inline
(bestenfalls) vom Optimierer als Hinweis behandelt wird. Im schlimmsten Fall wird es vollständig ignoriert.
Also was Sie tun, wird 1) verursachen Compilerfehler im Debug-Modus, die nicht in Release-Builds vorhanden war, und 2) haben keinen Einfluss auf die Leistung.
Gut genug, Sie haben das perfekt erklärt. Seufzend, das bedeutet eine riesige Codebereinigung :(Aber, danke! – nhaa123
Nun, das Löschen einer Menge von doppeltem Code ist nicht die schlimmste Form der Bereinigung gibt es, zumindest.;) – jalf