2015-01-04 2 views
7

7.1.6.1/1 enthält die folgende Anweisung (Hervorhebung von mir):Welche Relevanz hat diese Anweisung in 7.1.6.1/1 im C++ Standard?

Es gibt zwei cv-Qualifier, const und volatil. Wenn ein cv-Qualifier in einem erscheint Decl-specifier-Seq, die init-declarator-Liste der Erklärung wird nicht leer sein.

Was ist die Relevanz der oben fett gedruckten Aussage? Mit anderen Worten, ist es möglich, ein Beispiel für einen cv-unqualifizierten Typ in einem Deklarationsspezifikator-seq, in dem die Init-Deklarator-Liste der Deklaration leer ist?

Antwort

11

Sicher, die meisten Klassen und Enum-Definitionen davon Gebrauch machen:

struct A { }; // valid 
const struct B { }; // invalid, const would have no meaning 
const struct C { } c { }; // valid 

Es gibt nichts anderes.

7 Erklärungen [dcl.dcl]

3 In: eine Init-declarator-Liste ist nur in einer einfachen Deklaration, und dafür, der Standard (C++ 11) besagt, verwendet eine einfache Deklaration, das optional init-declarator-Liste kann nur verzichtet werden, wenn eine Klasse (Ziffer 9) oder Aufzählungs (7.2) zu erklären, das heißt, wenn die DECL-Spezifizierer-seq enthält entweder ein Klassenspezifizierer, ein elaborated-type-specifier mit einem Klassenschlüssel (9.1) oder einem enum-specifier.

+0

Ich war zu schnell mit meiner Antwort - aber können Sie mit etwas anderem kommen? Ich kämpfe. – Columbo

+0

Ich glaube nicht, dass es noch etwas gibt. Eigentlich denke ich, dass das auch nichts über implizites int sagt. Funktionsparameterdeklarationen haben keine init-declator-list, und falls ja, würde Ihre Antwort darauf hinweisen, dass 'void f (const int);' eine ungültige Deklaration ist. – hvd

+0

Ja, genau deshalb habe ich meine Antwort gelöscht, erst später wurde mir diese Tatsache bewusst. :) – Columbo

Verwandte Themen