2014-05-05 7 views
9

ich ein Beispiel aus der offiziellen Spezifikation BerücksichtigungWie ist Klasse A * A; Deklaration von C++ geparst?

class A * A; 

ich gelesen habe, dass diese Linie die beiden Namen führt: class A die über erarbeitet-Spezifikationstyp zugegriffen werden kann nur und Zeiger auf A. Ist Diese Linie entspricht vollständig den beiden folgenden Zeilen?

Ist diese Zeile nur Syntax Zucker und tatsächlich haben wir zwei Zeilen wie oben angegeben? Oder wie wird class A * A; vom Compiler geparst?

+0

was macht A * A line, macht keinen Sinn –

+2

@TejasPatel deklariert eine Variable 'A' vom Typ' A * '. –

+0

@LuchianGrigore Würde im zweiten Beispiel ein Operator * nicht aufgerufen, wenn er existiert? –

Antwort

9

Ja, die Inline-Deklaration ist nur syntaktischer Zucker. Sie geben den Namen und in der gleichen Zeile weiter.

+0

Danke für Ihre Antwort. Aber ich versuche, etwas darüber in der Spezifikation zu finden. Kannst du mir einen Hinweis geben? –

+1

auch die Tatsache, dass Sie eine Variable mit dem gleichen Namen (Groß- und Kleinschreibung) als eine Klasse deklarieren können, bedeutet nicht, dass Sie es tun sollten. : D – Massa

+0

Ich verstehe nicht, warum diese Zeile in C++ gültig ist. Kannst du mir einen Hinweis geben? –

8

Ich suche ausführlichere Antwort im Arbeitsentwurf N3797 und ich habe folgendes gefunden:

§8.3.3:

Somit wird eine Erklärung einer bestimmten Kennung hat das Formular T D wobei T von der Form attribute-specifier-seq_*opt* decl-specifier-seq ist und ein Deklarator ist.

§7.1:

decl-specifier: 
    storage-class-specifier 
    type-specifier 
    function-specifier 
    friend 
    typedef 
    constexpr 
decl-specifier-seq: 
    decl-specifier attribute-specifier-seq_*opt* 
    decl-specifier decl-specifier-seq 

§7.1.6:

type-specifier: 
    trailing-type-specifier 
    class-specifier 
    enum-specifier 

§8.3.1:

In einer Erklärung T D wo D die Form hat * attribute-specifier-seq_*opt* cv-qualifier-seq_*opt* D1 und den Typen des Identifikator in der Erklärung T D1 ist „abgeleitet-declarator-Typ-Liste T“, dann ist der Typ des Bezeichners der D ist „abgeleitet-declarator-Typ -Liste cv-Qualifier-Seq Zeiger auf T.“

Jetzt class-specifier enthält class Stichwort innen. Daher ist class A * A eine gültige Grammatikkonstruktion, wobei * A Deklarator ist.

Verwandte Themen