Zwei Syntax Fragen



  • int * p = new int;
    


  • 😕
    Ja, manuelle Speicherverwaltung, sehr schön, sehr fehleranfällig. Was willst du uns damit sagen?



  • das "int" hinter dem "new" ist ein einfaches Beispiel für eine type-id, also ein declarator ohne zu deklarierenden Namen
    manchmal verwendet man solche Dinge, ohne viel darüber nachzudenken



  • Nathan schrieb:

    Bisher hatte ich noch nie einen Fall, wo das nötig geworden ist. @Obvious

    Und daraus folgt, dass es niemals nötig ist?



  • Nein, daraus folgt, dass ich an solche Anwendungsfälle nicht gedacht habe, als ich meinen Post schrieb.
    Und rein theoritisch ist das niemals nötig, weil genau so gut, die Argumente in der Klasse gespeichert werden können über eine andere Funktion und in der entsprechenden Funktion dann auf die gespeicherten Argumente zugegriffen wird. 😉



  • Anderes Beispiel: Du hast Funktionszeiger in einem Container, die nunmal eine bestimme Signatur haben (input/output). Nicht jede Funktion verwendet aber den input.
    Ganz allgemein braucht man sowas, wenn man zwar im allgemeinen den Parameter braucht, in Spezialfällen aber eben nicht.
    Und ja, das ist dafür da um Warnings zu unterdrücken und meiner nach besser als die "Alternativen" wie unused = unused;



  • Ja, da hsst du Recht.
    In solchen Fällen kann man aber auch einfach schreiben:

    void foo(T, U)
    {
        //...
    }
    

    Das ist meiner Meinung nach schöner als diese "hässlichen" C-Style-Kommentare.



  • icewater schrieb:

    Moin, ich hab da mal zwei Fragen zum C++ Syntax: (Die Methoden stammen nicht von mir)

    int SimpleGUI::InitGUI(const char* /*name*/, const std::vector<std::string>& /*options*/)
    {
        return 0;
    }
    

    Warum kommentiert man die Übergabeparameter aus?

    Damit der Compiler keine Warnug raustut, daß die Parameter nicht benutzt worden wären.
    An sich eine gute Idee.
    Es gibt natürlich auch andere Wege, das zu bewerkstelligen.

    int SimpleGUI::InitGUI(const char* name, const std::vector<std::string>& options)
    {
        (void)name;//only to make the compiler happy
        (void)options;//only to make the compiler happy
        return 0;
    }
    
    int SimpleGUI::InitGUI(const char* name, const std::vector<std::string>& options)
    {
        boost::do_absolutely_nothing_with(name,options);
        return 0;
    }
    


  • volkard schrieb:

    int SimpleGUI::InitGUI(const char* name, const std::vector<std::string>& options)
    {
        boost::do_absolutely_nothing_with(name,options);
        return 0;
    }
    

    Da hatte aber jemand eine Menge Spaß 😃



  • Nathan schrieb:

    Ja, da hsst du Recht.
    In solchen Fällen kann man aber auch einfach schreiben:

    void foo(T, U)
    {
        //...
    }
    

    Das ist meiner Meinung nach schöner als diese "hässlichen" C-Style-Kommentare.

    Der Meinung bin ich prinzipiell auch.

    void foo(T first, U second); //damit der nutzer sieht was die Parameter prinzipiell bedeuten
    
    void foo(T, U) //wenn ich sie nicht verwende
    {
    }
    

Anmelden zum Antworten