Warum kommt diese Warnung, wenn man hier static verwendet?



  • warning: initializer element is not a constant expression

    Der Code:

    int f()
    {
      return 3;
    };
    
    int main(){
      static const double x = f();
      // ...
      return 0;
    }
    

    f() lieft doch immer einen Konstanten Wert zurück, wesshalb also die Warnung?



  • Weil f() zur Compile-Zeit nicht konstant ist, weil es ein Funktionsaufruf ist.
    edit: etwas mehr erklärung
    x ist static deshalb muss der Wert mit dem du es initialisierst konstant sein,
    denn dieser Wert wird beim Compilieren festgelegt (in den Speicher von x geschrieben).
    Speziell:
    Er befindet sich im .data-Segment und wird beim Laden des Programms mitgeladen
    http://en.wikipedia.org/wiki/.data


Anmelden zum Antworten