Обнаружена декларация при поиске безоговорочного имени

Рассмотрим следующий простой пример:

#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 этому условию; но нет

Другие вопросы по тегам