Nein.
Nun, irgendwie ja, in dem Sinne , dass es Menschen gibt , die die Meinung new
in new int
einem Operator sein. Diese Meinung steht jedoch (meistens) im Widerspruch zum Standard.
Zum einen [lex.operators/1]
werden die Operatoren in der Sprache. Lassen Sie sich nicht täuschen, dass dies auch nur "Vorverarbeitungsoperatoren" sind. Eine solche Unterscheidung besteht nicht im Sinne von lexikalischen Operatoren. Es wäre auch nicht sinnvoll, da Sie (zum Beispiel) ++
kein Makro können.
new
ist in der Tat ein Schlüsselwort (per [lex.key/1]
).
Schauen wir uns als nächstes den neuen Ausdruck selbst an. Hier wird es etwas wolliger. Es gibt zum Beispiel den folgenden Wortlaut in [expr.new/4]
:
Stattdessen kann die explizit in Klammern gesetzte Version des neuen Operators verwendet werden, um Objekte mit zusammengesetzten Typen zu erstellen
Ich halte dies für einen redaktionellen Fehler, da er im Widerspruch zu den oben angegebenen Definitionen steht und nirgendwo anders in diesem Abschnitt vorkommt.
Dann kommen wir zur Überlastung des Bedieners . In seiner grammatikalischen Erstellung für eine Operatordeklaration wird das Terminal, das Dinge (einschließlich new
) auflistet, als Operator ( [over.oper.general/1]
) bezeichnet. Ich glaube nicht, dass wir uns darüber Sorgen machen müssen. Die Namen von Terminals in der Grammatik sollten niemals Definitionen von Begriffen einführen. Schließlich haben Sie den Ausdruck, dass _ keine bitweise UND-Verknüpfung sein muss. es kann nur ein Gleichheitsausdruck sein :
und-Ausdruck :
Gleichheitsausdruck
und -ausdruck &
Gleichheitsausdruck
Es ist üblich, Grammatiken wie diese zu definieren, und dies bedeutet sicherlich nicht, dass jeder Gleichheitsausdruck irgendwie als Aufruf des bitweisen AND-Operators zu betrachten ist.
Schließlich haben einige behauptet, dass der folgende Wortlaut (auch im Abschnitt zum Überladen von Operatoren) ein Beweis dafür new
ist, dass er jetzt irgendwie isoliert magisch ein Operator ist:
Die Betreiber new[]
, delete[]
, ()
, und []
sind von mehr als einem Token gebildet
Ich sage ihnen, dass nicht nur new
nicht einmal aufgeführt ist, sondern dass der Begriff "Operator" eindeutig im weiteren Sinne von "Dinge, die überladen werden können" verwendet wird, obwohl er new
an sich immer noch kein Operator ist . Es ist auch in einer nicht normativen Notiz, die Ihnen alles sagen sollte, was Sie wissen müssen.
Und wie Sie selbst betonen, betrachten wir bereits operator new
etwas anderes.
new
ist wiesizeof
hier. Und ich denke, die Mehrheit der C ++ - Community denkt ansizeof
einen Operator. Der Standard bezieht sich bei dersizeof
Beschreibung seiner Auswirkungen sogar auf den " Operator".