2009-03-17 4 views
0

C++ ISO-Standard sagt: "Eine Funktion, die innerhalb einer Klassendefinition definiert wird, ist eine Inline-Funktion." *Gibt es Compiler, die IGNORE C++ Standard über Standard-Inline-Funktionen?

Kennen Sie irgendwelche Compiler, die diese Regel IGNORIEREN?

Kennen Sie irgendwelche Compiler, die diesen 'Inline-Vorschlag' NICHT dort platzieren?

(bitte die Theorie über inlines nicht wiederholen, ich bin mir dessen bewusst, dass - ich brauche eine praktische Antwort)

+0

Duplikat von http://stackoverflow.com/questions/654452/are-there-any-compilers-that-ignore-c-standard-about-default-inline-functions, vor kurzem von derselben Person gefragt. –

+0

Es tut mir leid, ich wollte meine Frage neu formulieren - ich lese jetzt FAQ und bearbeite meine vorherige. Tut mir leid, dass du Chaos gemacht hast. –

Antwort

1

Alle Compiler alle Inline-Vorschläge sie zu entscheiden, ignorieren dürfen. Wenn sie zum Beispiel entscheiden, dass die Funktion zu komplex ist, wird sie nicht inline sein. Wenn Sie die Adresse der Funktion verwenden, wird die Funktion möglicherweise an einigen Stellen inlined, aber an anderer Stelle wird eine vollständige Funktion generiert, auf die die Adresse verweisen kann.

Denken Sie an inline und das implizite Inline, wenn Sie eine Funktion in einer Klassendefinition als Vorschläge für den Compiler definieren.

0

In gcc können Sie

-finline-limit=n 
-fno-inline 
1

verwenden Es ist keine Regel, es ist einfach eine Feststellung. Die Spezifikation besagt einfach, dass die Funktion inline definiert ist. Das erleichtert es dem Compiler, den generierten Code auch tatsächlich einzubinden, aber das erfordert der Standard nicht.

Sie sind unterschiedliche Konzepte. Wie der generierte Code aussieht, hängt vom Compiler ab, und der Standard schreibt keine Anforderungen vor (außer natürlich, dass er sich wie angegeben verhalten sollte).

0

Siehe meine Antwort auf eine ganz ähnliche Frage: When is "inline" ineffective? (in C)

Zusammenfassung: inline ist nur mehrere Definitionen ermöglichen erforderlich. Jede Funktion, die Änderungen aufruft, ist rein optional.

Verwandte Themen