inline class - was passiert und bringt es was?



  • Servus,

    habe vorhin mal spaßeshalber eine class als inline deklariert, also ungefähr so:

    inline class Test
    {
    public:
        int a;
        int b;
    };
    

    Das Kompilieren hat auch perfekt funktioniert (was ich ehrlich gesagt nicht erwartet habe) - aber nun die Frage: wird sowas verwendet, was passiert genau beim Kompilieren, und hat es irgendeinen Nutzen? Also gibt es Fälle, wo sowas tatsächlich sinnvoll sein kann?

    Die Idee kam mir deswegen, weil ich mir gerade ein komplexes Framework ausdenke mit vielen kleinen Spezialklassen, aber um die Performance wieder ein Stückweit zurückzugewinnen, habe ich so aus Spaß mal drüber nachgedacht, ob man Klassen eben auch inline definieren kann.

    Aber ehrlich gesagt kann ich grad nicht komplex genug denken, um mir auszumalen, was der Compiler wohl mit dieser Deklaration so anstellen mag 😉 daher wäre es nett von euch, wenn ihr mir hierfür genauere Auskunft geben könntet 🙂



  • 😮 Das gibt's tatsächlich? Nach meinem Verständnis ist das inline an dieser Stelle eigentlich sinnlos (wenn nicht gar verboten) - bist du sicher, daß es nicht irgendwo auf dem Weg zum Compiler weg-#define'd wurde?

    Klassen kannst du nicht inline definieren - was soll das überhaupt bringen? Du kannst höchstens ihre Methoden inlinen, um die Arbeit zu optimieren.



  • Hmm okay also vorhin hab ich es mit Digital Mars kompiliert, und es wurde keine Meldung ausgegeben.

    Jetzt hab ich allerdings den Microsoft-Compiler benutzt, und er bringt: "warning C4091: 'inline' : Ignoriert auf der linken Seite von 'class Test', wenn keine Variable deklariert wurde"

    Soviel also dazu 😉 tja okay hätte ich auch früher drauf kommen können, das mit einem anderen Compiler zu testen. Oder einmal mit und einmal ohne inline compilen und dann beide .exe-Dateien vergleichen.

    Also nix für ungut 😉



  • Nein, dass kann nicht korrekt sein...

    das keyword ist in der Syntax als function specifier eingestuft.

    Im Standard steht als Beschreibung des Terminals function-specifier:

    function-specifiers can be used only in function definitions

    Das gleiche gilt für virtual und explicit



  • hola

    visual studio 2005 compiliert es auch. gibt jedoch noch ne warnung mit auf den weg

    warning C4091: 'inline ': Ignoriert auf der linken Seite von 'TestClass', wenn keine Variable deklariert wurde
    

    Meep Meep



  • Ist doch ok, solange er wenigstens noch eine Warnung ausgibt,

    Wobei es eigentlich ein Verstoß gegen die Syntax ist...



  • Vielleicht akzeptiert der Parser das, um sein Lookahead kleiner zu halten. In folgendem Fall wäre ein 'inline' vor einer Klasse nämlich erlaubt:

    inline class foo { /* ... */ } bar() {
        return foo();
    }
    


  • Ich glaube das inline vor der Klasse bewirkt, dass alle Methoden inline werden.



  • Das ist allerdings nicht Gegenstand des Standards....



  • Im Grunde ist es falsch, da AFAIK neue Typen nicht im Rückgabetyp definiert werden dürfen. (Vor allem, wenn dann noch die komplette Funktionsdefinition fehlt. 😕 )


Log in to reply