У меня был Q & A до: Точка декларации в С++. Правило-точка-декларация хорошо применима во многих ситуациях. Теперь я смутил использование auto
в сочетании с этим правилом.
Рассмотрим эти два кода:
я. Объявление x
само по себе (мы не ожидаем его работы):
{
auto x = x;
}
II. Объявление внутреннего x
внешним x
(оно делает ошибку в gcc 4.8.x):
{
int x = 101; // the outer x
{
auto x = x; // the inner x
}
}
Согласно правилу пункта декларации, он должен работать, но это не так. Кажется, в стандарте есть еще одно правило, которое я пропустил. Вопрос в том, что Где точка объявления при использовании auto
?
Есть две возможности:
я. Если точка объявления после =
, в конце инструкции:
auto object = expression;
^
Is it here? If it is, why gcc complains?
Таким образом, второе объявление является действительным и должно работать, потому что нет x
, а внешнего (что объявлено ранее). Поэтому auto x=x
допустим, а внутренний x
должен быть назначен 101
.
II. Если точка объявления находится перед =
:
auto object = expression;
^
Ну, это не имеет никакого смысла, потому что auto
должен ждать, пока не увидит следующее выражение. Например, auto x;
недействителен.
Обновить. Мне нужен ответ, который объясняет это точкой правила объявления.