Этот вопрос напрямую связан с this one. Рассмотрим код:Имеют ли встроенные переменные пространства имен внутреннюю связь? Если нет, то почему код ниже работает?
#include <iostream>
inline namespace N1
{
int x = 42;
}
int x = 10;
int main()
{
extern int x;
std::cout << x; // displays 10
}
Он отображает 10
. Если удалить extern int x;
декларацию, то мы получаем ошибку времени неоднозначность компилятор
error: reference to 'x' is ambiguous
Вопрос: почему код работы с Декларацией работы extern int x
, и почему он перестает работать, когда я удалить его? Это потому, что переменные пространства inline имеют внутреннюю связь?
Они не имеют внутренней связи, если они не заключены в неназванное пространство имен. Вы сбиваете с толку встроенные и неназванные? –
@ T.C. Нет, я не путаю их. Я знал, что неназванные пространства имен имеют внутреннюю связь. – vsoftco
Возможно, вы должны перефразировать вопрос «почему это работает», поскольку вы, вероятно, больше заинтересованы в этом, чем в строго логическом ответе на то, действительно ли переменные пространства имен имеют статическое хранилище или внутреннюю связь (это то, что соответствует текущему адресу ответов). – zneak