statische Funktionen



  • hallo, ich habe eine verständnisfrage zu statischen Funktionen

    oftmals muss man ja zB für std::sort ein sortier-kriterium erzeugen,
    ich habe dann nun Zb sowas gemacht :

    hypothesis.hpp

    static bool moreProbable(const Hypothesis& utt1,const Hypothesis& utt2)
      {
      return (utt1.getLogProb() > utt2.getLogProb());
      }
    

    nun meckert aber gcc, :
    hypothesis.hpp:32: warning: 'bool moreProbable(const UtteranceHypothesis&, const UtteranceHypothesis&)' defined but not used

    die aussage ist ja schon aussagekräftig, aber warum er davor warnt kapiere ich trotzdem nicht

    wenn ich die Funktion nun aber in die cpp auslager, verliere ich das
    implizite inline, und eigentlich finde ich das auch quatsch, kann mir
    wer erklären was diese fehler meldung soll, und wie man vielleicht beseitigt

    danke



  • Wenn du die Funktion an std::sort weitergibst, verlierst du die Möglichkeit des inlining imho sowieso, da ja die Adresse der Funktion benötigt wird. Folglich muss sie sich im Programmspeicher befinden.

    Gruß
    Don06



  • @Don06: Nein, das stimmt so nicht. Wenn die Funktion kurz genug ist, dann kann der Compiler sie bei der Template-Erzeugung (z.B. bei std::sort) automatisch inlinen.
    Um das zu unterstützen kann man die Funktion explizit noch mit dem Schlüsselwort "inline" markieren.

    @Statiker: Du solltest niemals "static"-Funktionen in Header deklarieren, da diese dann bei Einbindung mittels #include "..." von jeder CPP-Datei instanziiert werden, d.h. diese Funktion gibt es dann mehrmals in deinem Programm (wenn auch nicht benutzt, und genau davor warnt dich der Compiler).

    Richtig wäre also entweder
    - die Funktion im Header (automatisch inline) definieren
    oder aber
    - nur in der CPP-Datei (inline) definieren (wenn sie nur dort benutzt wird)
    !!!


Anmelden zum Antworten