Zum Beispiel eine Erklärung wie die folgende:
int (x) = 0;
Oder sogar das:
int (((x))) = 0;
Ich bin darauf gestoßen, weil ich in meinem Code zufällig ein Fragment hatte, das dem folgenden ähnlich ist:
struct B
{
};
struct C
{
C (B *) {}
void f () {};
};
int main()
{
B *y;
C (y);
}
Offensichtlich wollte ich ein Objekt konstruieren, C
das dann etwas Nützliches in seinem Destruktor tun würde. In diesem Fall wird der Compiler jedoch C (y);
als Deklaration einer Variablen y
mit Typ behandelt C
und gibt daher einen Fehler bezüglich der y
Neudefinition aus. Interessant ist, dass wenn ich es so C (y).f ()
oder so schreibe, es C (static_cast<B*> (y))
wie beabsichtigt kompiliert wird. Die beste moderne Problemumgehung ist {}
natürlich die Verwendung im Konstruktoraufruf.
Wie ich später herausgefunden habe, ist es möglich, Variablen wie int (x) = 0;
oder sogar zu deklarieren, int (((x))) = 0;
aber ich habe noch nie jemanden gesehen, der solche Deklarationen tatsächlich verwendet. Ich bin also interessiert - was ist der Zweck einer solchen Möglichkeit, weil ich im Moment sehe, dass sie nur den Fall schafft, der der berüchtigten "ärgerlichsten Analyse" ähnelt und nichts Nützliches hinzufügt?