Warum ist new int (*) [3] ein Fehler?

8
%Vor%

Der Fehler von GCC ist error: expected primary-expression before ')' token . Warum sind die zusätzlichen Klammern in diesem Ausdruck erforderlich?

    
M.M 25.09.2014, 01:57
quelle

1 Antwort

10

Der Standard definiert new-type-id als längste Folge von neuen Deklaratoren . Es gibt auch eine Notiz, die eine ähnliche Situation darstellt (obwohl sie Zeiger auf Funktionen zuweist):

  

5.3.4 Neu [expr.new]

     

....

     

new-type-id:
   type-specifier-seq neuer Deklarator opt

     

Neudeklarator:
   ptr-operator neuer-declarator opt
   noptr-new-declarator

     

noptr-new-declarator:   [ Ausdruck ]    attributspezifizierer-seq opt
   noptr-new-declarator   [ Konstantenausdruck ]    attributspezifizierer-seq    opt

     

....

     

Die new-type-ID in einem neuen Ausdruck ist die längste mögliche Folge von neuen Deklaratoren .   [ Hinweis : Dies verhindert Mehrdeutigkeiten zwischen den Deklaratoroperatoren & , && , * und [] und   ihre Ausdruckspartner. - Endnote ] [ Beispiel :

%Vor%      

* ist der Zeigerdeklarator und nicht der Multiplikationsoperator. - Ende Beispiel ]

     

[ Hinweis : Klammern in einer neuen Typ-ID eines neuen Ausdrucks können   haben überraschende Effekte. [ Beispiel :

%Vor%      

ist schlecht gebildet, weil die Bindung

ist %Vor%      

Stattdessen die explizit eingeklammerte Version des new -Operators   kann verwendet werden, um Objekte zusammengesetzter Typen (3.9.2) zu erstellen:

%Vor%      

weist den Funktionen ein Array von 10 Zeigern zu (ohne Argument und   Rückgabe von int . - Endbeispiel ] - Endnote ]

    
AlexD 25.09.2014, 02:18
quelle

Tags und Links