Если глобальные переменные и объекты имеют статическую продолжительность хранения и внешнюю связь?
все ли функции имеют статичное время хранения и внешнюю связь?
как насчет структур и классов и счетчиков (имеет внешнюю связь, которую я знаю)/союзы?
Я полагал, что у них нет времени на хранение и нет связи, но тогда я думал, что (глобальные) функции имеют внешнюю связь по умолчанию, но в классе у них есть классная область, у них есть внутренняя связь или?
Длительность хранения и связь - это не связанные понятия.
Функции не имеют "продолжительности хранения", так как функции не хранятся в памяти. Только объекты имеют продолжительность хранения. Типы также не хранятся в хранилище, поэтому типы не имеют продолжительности хранения.
Неправильно говорить, что классы вообще не связаны. Именованные классы, объявленные в области пространства имен, имеют внешнюю связь. Функции членов классов с внешней связью также имеют внешнюю связь. Классы, объявленные локально и безымянные классы, не имеют связей.
Функции официально не имеют продолжительности хранения, но по существу они статичны (т.е. Каждая функция существует для всей продолжительности программы). Они имеют внутреннюю связь, если вы определяете их как static
и внутри анонимного пространства имен, иначе внешние связи.
Класс хранения применяется к объекту, а не к определению типа, как класс, структура или объединение. Достаточно распространено иметь два объекта одного класса: один со статическим временем хранения, а другой - с продолжительностью автоматического хранения.
Аналогично, вы можете создать один объект с внутренней связью, а другой с внешней связью:
T x;
static T y;
То же самое касается связи классов:
class X { }; // external linkage
namespace {
class Y {}; // internal linkage
};
static
(где это применимо).