Обнаружена декларация при поиске безоговорочного имени
Рассмотрим следующий простой пример:
#include <iostream>
int a=5;//1
extern int a;//2
int main(){ cout << a; }
Стандарт гласит, что (п. 3.4/1):
Поиск имени должен найти однозначную декларацию имени
и (п. 3.4.1/1):
поиск имени заканчивается, как только для имени найдено объявление.
Вопрос: Какая декларация (1 или 2) будет найдена в моем случае и почему?
1 ответ
Этот пункт говорит, что поиск имени останавливается, когда он попадает int a=5;
Здесь только одно имя, a
в глобальном пространстве имен. Это не двусмысленно, потому что есть только один a
, не имеет значения, если есть несколько объявлений a
, Две декларации, одно имя. ("Неоднозначный" случай может иметь место только при поиске имени члена класса, что более подробно описано в этом разделе).
Я понял из вашей формулировки, что вы ожидаете, что будет какое-то другое поведение в зависимости от того, удовлетворяет ли 1 или 2 этому условию; но нет