Deklarationspunkt für das Schlüsselwort auto
Ich hatte vorher eine Frage und Antwort:Deklarationspunkt in C ++. Die RegelBestimmungsort ist in vielen Situationen gut anwendbar. Jetzt habe ich bei der Verwendung von verwirrtauto
in Kombination dieser Regel.
Betrachten Sie diese beiden Codes:
ich. Deklarierenx
von selbst(Wir erwarten nicht, dass es funktioniert):
{
auto x = x;
}
ii. Das Innere erklärenx
durch die äußerex
(Es macht Fehler in gcc 4.8.x):
{
int x = 101; // the outer x
{
auto x = x; // the inner x
}
}
Nach der Regel des Point-of-Declaration sollte es funktionieren, tut es aber nicht. Es scheint, dass es eine andere Regel im Standard gibt, die ich verpasst habe. Die Frage ist,Wo befindet sich der Deklarationspunkt bei der Verwendung?auto
?
Es gibt zwei Möglichkeiten:
ich. Wenn der Deklarationszeitpunkt nach liegt=
am Ende der Erklärung:
auto object = expression;
^
Is it here? If it is, why gcc complains?
Die zweite Erklärung ist also gültig und muss funktionieren, weil es keine gibtx
aber das äußere (das vorher erklärt wird). Deshalbauto x=x
ist gültig und das Innerex
sollte zugewiesen werden101
.
ii. Wenn der Deklarationspunkt vorher liegt=
:
auto object = expression;
^
Nun, das ergibt keinen Sinn, weilauto
muss warten, bis der folgende Ausdruck angezeigt wird. Zum Beispielauto x;
ist ungültig.
Aktualisieren: Ich brauche eine Antwort, die es durch die Regel erklärtErklärungspunkt.