Operatorüberladung und Initialisierungslisten auf RHS
In der C-Programmierung sind Initialisierungslisten eine prägnante Syntax zum Initialisieren von Aggregatobjekten mit einer Liste von Ausdrücken . Während Initialisierungslisten bequem in verschiedenen Szenarien verwendet werden können, war ihre Verwendung auf der rechten Seite (RHS) der Operatoren ein Diskussionspunkt.
Warum Initialisierungslisten auf der rechten Seite (RHS) eingeschränkt sind
C 11 erlaubt keine Initialisierungslisten auf der RHS von Operatoren, einschließlich des binären Operators << in Ihrem Code verwendet. Es gibt einige Gründe für diese Einschränkung:
Ausnahmen für Initialisierungslisten
Trotz der allgemeinen Einschränkung Durch die Verwendung von Initialisierungslisten in Operatorargumenten definiert C bestimmte Ausnahmen, in denen sich Initialisierungslisten befinden akzeptiert:
In Ihrem Code können Sie Verwenden Sie eine Initialisierungsliste als Argument für den Balkenkonstruktor, der innerhalb von << aufgerufen wird. Operator:
foo baz; baz << bar{1, -2, "foo", 4, 5}; // Legal
Gründe für die Einschränkung
Die Entscheidung, Initialisierungslisten auf der RHS von Operatoren einzuschränken, ergibt sich aus dem Wunsch, eine konsistente und klare Grammatik beizubehalten. Das Zulassen von Initialisierungslisten in allen Kontexten hätte zu zusätzlicher Komplexität und potenzieller Mehrdeutigkeit in der Sprache geführt.
Wie in dem in Ihrer Frage erwähnten Diskussionspapier erwähnt, wurde die Alternative in Betracht gezogen, Initialisierungslisten auf der RHS, aber nicht auf der LHS zuzulassen zu problematisch. Daher wurde der konservative Ansatz gewählt, Initialisierungslisten nur in bestimmten Kontexten zuzulassen.
Das obige ist der detaillierte Inhalt vonWarum kann ich auf der rechten Seite von C-Operatoren keine Initialisierungslisten verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!