Ad esempio una dichiarazione come quella:
int (x) = 0;
O anche quello:
int (((x))) = 0;
Mi sono imbattuto in questo perché nel mio codice mi è capitato di avere un frammento simile al seguente:
struct B
{
};
struct C
{
C (B *) {}
void f () {};
};
int main()
{
B *y;
C (y);
}
Ovviamente volevo costruire un oggetto C
che poi avrebbe fatto qualcosa di utile nel suo distruttore. Tuttavia, come accade il compilatore tratta C (y);
come una dichiarazione di variabile y
con tipo C
e quindi stampa un errore sulla y
ridefinizione. La cosa interessante è che se lo scrivo come C (y).f ()
o come qualcosa di simile C (static_cast<B*> (y))
verrà compilato come previsto. La migliore soluzione alternativa moderna è quella di utilizzare {}
nella chiamata al costruttore, ovviamente.
Quindi, come ho capito dopo, è possibile dichiarare variabili come int (x) = 0;
o anche int (((x))) = 0;
ma non ho mai visto nessuno usare effettivamente dichiarazioni come questa. Quindi mi interessa: qual è lo scopo di tale possibilità perché per ora vedo che crea solo il caso simile al famigerato "analisi più irritante" e non aggiunge nulla di utile?