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.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage