Я думаю, что автор связал продолжительность хранения и связь, хотя совет, какие ключевые слова использовать, является правильным.
Ваша переменная области действия функции instance
имеет статическую продолжительность хранения. Без ключевого слова static
он будет иметь автоматическую продолжительность хранения.
Объект в области действия файла всегда имеет статическую длительность хранения (ну или длительность хранения потока в C ++ 11 с ключевым словом thread_local
). Использование ключевого слова static
в области действия файла дает объекту внутреннюю связь , extern
дает ему внешнюю связь , они не влияют на продолжительность хранения.
Правильно описать что-то, имеющее «статический класс хранения», поскольку static
является так называемым «спецификатором класса хранения», но это не вся история, поскольку значение static
в области видимости файла отличается от значение в объеме функции.
Вы можете передавать ссылку на объект со статической длительностью хранения в код из других единиц перевода. Неважно, имеет ли он область видимости файла или функции, и не имеет значения, какова его связь. «У них должен быть нормальный (внешний) класс хранения, если они используются другими файлами», просто означает, что глобальному элементу нужна внешняя связь, если другие файлы будут ссылаться на него по имени , поскольку глобальное имя с внутренним Связь относится к другому объекту в каждом TU. Технически это имя имеет связь, а не объект.