Frage zu inline
-
Hallo.
Der inline Spezifizierer für Funktionen sorgt ja dafür, dass ein Aufruf durch ein Einfügen des Codes ersetzt wird. Meine Frage ist jetzt: Welcher Code? Der C++ Quellcode, oder der "Code" in Objektdateien o.ä.Warum ich das wissen will: Ich möchte wissen, ob folgendes funktioniert:
// Datei A class T{ inline void f(); };// Datei B #include "A" void T::(){}beim kompilieren sorgt das für keinen fehler. Aber wird ein aufruf dann auch wirklich (im binary) ersetzt sein?
-
piXelshooter schrieb:
Hallo.
Der inline Spezifizierer für Funktionen sorgt ja dafür, dass ein Aufruf durch ein Einfügen des Codes ersetzt wird.Jein. http://www.c-plusplus.net/forum/viewtopic-var-t-is-105893.html
Meine Frage ist jetzt: Welcher Code? Der C++ Quellcode, oder der "Code" in Objektdateien o.ä.
Macht das einen Unterschied? Das Verhalten des Programms darf sich nicht verändern.
Warum ich das wissen will: Ich möchte wissen, ob folgendes funktioniert:
// Datei A class T{ inline void f(); };// Datei B #include "A" void T::(){}beim kompilieren sorgt das für keinen fehler. Aber wird ein aufruf dann auch wirklich (im binary) ersetzt sein?
Ja, aber nur wenn du f aus Datei B heraus aufrufst. Wenn du irgendwo nur A.h einbindest, ist die Funktionsdefinition nicht sichtbar, kann also auch nicht eingefügt werden.
-
Bashar schrieb:
Meine Frage ist jetzt: Welcher Code? Der C++ Quellcode, oder der "Code" in Objektdateien o.ä.
Macht das einen Unterschied? Das Verhalten des Programms darf sich nicht verändern.
Ja. Denn Binärcode wird dann ja eh irgendwie "zusammengepappt", die quellcodes stehen sich aber offensichtlich nicht unbedingt zur verfügung
Warum ich das wissen will: Ich möchte wissen, ob folgendes funktioniert:
// Datei A class T{ inline void f(); };// Datei B #include "A" void T::f(){}beim kompilieren sorgt das für keinen fehler. Aber wird ein aufruf dann auch wirklich (im binary) ersetzt sein?
Ja, aber nur wenn du f aus Datei B heraus aufrufst. Wenn du irgendwo nur A.h einbindest, ist die Funktionsdefinition nicht sichtbar, kann also auch nicht eingefügt werden.[/quote]
ok danke das wollte ich wissen.