Se si guarda alla grammatica per *declarator*s in §8/4
si noterà che un noptr-declarator
può essere scritta come (ptr-declarator
), cioè, può essere scritto come (declarator-id
), che convalida le dichiarazioni come quelle in il titolo. Come infatti questo codice viene compilato senza problemi:Qual è lo scopo di una dichiarazione come int (x); o 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';
}
Ma qual è lo scopo di consentire queste parentesi quando un puntatore (per un array o una funzione) non è coinvolto nella dichiarazione?
Presumibilmente perché proibirli richiederebbe una grammatica più complessa. –
Questa potrebbe essere una spiegazione. Non ci ho pensato. – Mao
Analogamente, '(42)' è un'espressione valida anche se le parentesi non sono necessarie. –