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

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

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

2

Другие решения


По вопросам рекламы [email protected]