Obwohl zusätzliche Klammern im Allgemeinen die Bedeutung eines C-Programms nicht ändern, gibt es bestimmte Situationen, in denen sie eine haben Wirkung, die über das Überschreiben der grundlegenden Operatorpriorität hinausgeht:
Klammern um Funktionsaufrufe wie (fn)(arg) verhindern die argumentabhängige Namenssuche (ADL). Ohne Klammern würde fn(arg) in umschließenden Namespaces nach möglichen passenden Funktionen suchen.
In Listenkontexten wie Funktionsargumenten oder Initialisierungslisten ermöglicht a, (b, c), d, dass der Kommaoperator im Gegensatz zum Standard a, (b, c) separat auf (b, c) angewendet werden kann. b-, c-, d-Notation.
Zusätzliche Klammern können Code eindeutig machen, wenn eine deklarationsähnliche Syntax mit einer Funktions- oder Ausdrucksanweisung kollidiert. Zum Beispiel in S w(int(a)); und S y((int)a);, Klammern machen deutlich, dass es sich um Objektdeklarationen und nicht um Funktionsdeklarationen handelt.
decltype(e) leitet ab, ob der Operand eine L-Wert- oder R-Wert-Referenz ist. Das Hinzufügen von Klammern, wie in decltype((e)), erzwingt, dass der Operand als R-Wert-Referenz behandelt wird.
Klammern können innerhalb von Makrodefinitionen verwendet werden, um Probleme mit der Operatorpriorität zu vermeiden, Makroargumente durch Kommas zu schützen und eine Makroerweiterung in Headern zu verhindern. Beispiel: #define TIMES(A, B) (A) * (B); stellt sicher, dass TIMES(1 2, 2 1) 9 ergibt.
Das obige ist der detaillierte Inhalt vonWann und wie werden in C zusätzliche Klammern verwendet, um die Namenssuche, das Verhalten von Komma-Operatoren oder die Ausdrucksauswertung zu manipulieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!