6 Stimmen

Definition von static const außerhalb der Klassendefinition

Sollten wir ein static const-Element außerhalb der Klassendefinition definieren, auch wenn es innerhalb der Klasse initialisiert ist?

#include  
using namespace std;  
class abc  
{  
    static const int period=5;  
    int arr[period];  
  public:  
    void display()   
    {   
        cout<

``

Nach Kommentierung von // const int abc::period; funktionieren beide Versionen des Codes problemlos in gcc 4.3.4. Deshalb möchte ich fragen, warum funktionieren beide Versionen und welche ist standardkonform?

``

8voto

Prasoon Saurav Punkte 88056

Du definierst das statische Element period, indem du const int abc::period; schreibst. Du darfst einen In-Klassen-Initialisierer für das static const Element einer Klasse bereitstellen, aber das ist keine Definition, sondern nur eine Deklaration.

9.4.2/4 - Wenn ein statisches Element vom const integralen oder const enumeration Typ ist, kann seine Deklaration in der Klassendefinition einen Konstanten-Initialisierer angeben, der ein ausdruck der integralen Konstanten sein muss (5.19). In diesem Fall kann das Element in integralen Konstantenausdrücken erscheinen. Das Element muss immer noch in einem namespace-Bereich definiert werden, wenn es im Programm verwendet wird, und die Definition im namespace-Bereich darf keinen Initialisierer enthalten.

Dein Code kompiliert auch ohne die Definition, weil du die Adresse des statischen Elements nicht nimmst. Bjarne Stroustrup erwähnt in der C++-FAQ hier, dass Du die Adresse eines statischen Elements nur nehmen kannst, wenn (und nur wenn) es eine Definition außerhalb der Klasse hat

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X