Por que o C ++ nos permite colocar o nome da variável entre parênteses ao declarar uma variável?
Por exemplo, uma declaração como essa:
int (x) = 0;
Ou até isso:
int (((x))) = 0;
Eu me deparei com isso porque, no meu código, tinha um fragmento semelhante ao seguinte:
struct B
{
};
struct C
{
C (B *) {}
void f () {};
};
int main()
{
B *y;
C (y);
}
Obviamente, eu queria construir objetoC
o que faria algo útil em seu destruidor. No entanto, como acontece o compilador trataC (y);
como uma declaração de variávely
com tipoC
e, assim, imprime um erro sobrey
redefinição. O interessante é que, se eu escrever comoC (y).f ()
ou como algo parecidoC (static_cast<B*> (y))
compilará como pretendido. A melhor solução moderna é usar{}
na chamada do construtor, é claro.
Então, como descobri depois disso, é possível declarar variáveis comoint (x) = 0;
ou mesmoint (((x))) = 0;
mas nunca vi alguém usando declarações como essa. Então, eu estou interessado - qual é o objetivo de tal possibilidade, porque, por enquanto, vejo que isso apenas cria um caso semelhante ao notório "exame mais irritante" e não acrescenta nada de útil?