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