Wenn man sich die Grammatik sucht *declarator*s in §8/4
werden Sie feststellen, dass ein noptr-declarator
geschrieben werden kann (ptr-declarator
), das heißt, es kann wie folgt geschrieben werden (declarator-id
), die Erklärungen wie die, die überprüft in der Titel. Wie in der Tat stellt dieser Code ohne ein Problem:Was ist der Zweck einer Deklaration wie int (x); oder int (x) = 10;
#include <iostream>
struct A{ int i;};
int (x) = 100;
A (a) = {2};
int main()
{
std::cout << x << '\n';
std::cout << a.i << '\n';
}
Aber , was der Zweck zu erlauben, diese Klammern ist, wenn ein Zeiger (auf einen Array oder eine Funktion) in der Erklärung nicht beteiligt ist?
Vermutlich, weil zu verbieten sie eine komplexere Grammatik erfordern würde. –
Das könnte eine Erklärung sein. Ich habe nicht darüber nachgedacht. – Mao
In ähnlicher Weise ist '(42)' ein gültiger Ausdruck, obwohl die Klammern unnötig sind. –