Я понимаю, что существует три возможных значения связи для переменной в C ++ - без привязки, внутренней связи и внешней связи.
Таким образом, внешняя связь означает, что идентификатор переменной доступен в нескольких файлах, а внутренняя связь означает, что она доступна в одном файле. Но в чем смысл внутренней увязки? Почему бы просто не иметь две возможные связи для идентификатора - без связи и внешней связи? Мне кажется, что глобальная (или файловая) область видимости и внутренняя связь служат одной и той же цели.
Есть ли какой-либо вариант использования, когда действительно полезна внутренняя связь, не охватываемая глобальной областью?
В приведенном ниже примере у меня есть два фрагмента кода: первый ссылается на статический int i11 (который имеет внутреннюю привязку), а второй - нет. Оба в значительной степени делают одно и то же, поскольку main уже имеет доступ к переменной i11 из-за области ее файла. Итак, зачем нужна отдельная связь, называемая внутренней связью.
static int i11 = 10;
int main()
{
extern int i11;
cout << ::i11;
return 0;
}
дает тот же результат, что и
static int i11 = 10;
int main()
{
cout << ::i11;
return 0;
}
РЕДАКТИРОВАТЬ: Просто для большей ясности, согласно приведенному ниже определению HolyBlackCat, внутренняя связь действительно означает, что вы можете пересылать объявление переменной в той же единице перевода. Но зачем вам вообще нужно делать это для переменной, которая уже доступна глобально в файле .. Есть ли какой-либо вариант использования этой функции?