Страницы

Поиск по вопросам

вторник, 2 апреля 2019 г.

Польза от использования extern?

Можно ли извлечь какую-нибудь пользу от использования extern в с++? Допустим, например, что программа не использует глобальные переменные. Первая мысль что приходит на ум, так это попытаться использовать extern для использования функций, не объявляя при этом их в заголовке (вероятно это увеличит скорость компиляции - но ведь и может замедлить например скорость линковки). В общем немного не понятно, может это просто рудимент от с, и в с++ не имеет большого смысла.


Ответ

Этот вопрос в общем-то отвечен в документации и на форуме http://www.cplusplus.com/forum/general/21368/
Во-первых. понятие "польза" здесь неприменимо. Ключевое слово extern выполняет функции, иначе не достижимые другими средствами. Извините, но в языке редко остается что-то лишнее просто так (ключевое слово register - очень особый случай)
Ключевое слово extern используется в трех случаях
Для описания статического хранилища со спецификатором внешнего связывания. Для указания языка, "С" или "С++". Это влияет на то, происходит ли искажение имен для С++ или нет). Следует учитывать, что это не предполагает что код компилируется "как в Си". Декларация явной инстанциации шаблона типа (extern template).До С++11 это было только расширением языка (оригинально - компиляторов IBM), при использовании некоторых компиляторов extern не требовался. Его разрешено использовать только один раз для данного списка аргументов.
extern template сlass-name < argument-list >;
An explicit instantiation declaration (an extern template) skips implicit instantiation step: the code that would otherwise cause an implicit instantiation instead uses the explicit instantiation definition provided elsewhere (resulting in link errors if no such instantiation exists). This can be used to reduce compilation times by explicitly declaring a template instantiation in all but one of the source files using it, and explicitly defining it in the remaining file (С++11).
Декларация явной инстанциации шаблона (внешний шаблон) позволяет пропустить шаг неявного создания кода шаблона и вместо этого использовать экземпляр шаблона, описанный где-то еще (что привело бы к ошибкам редактора связей, если таковая не была произведена). В С++ декларация явной специализации во всех файлах исходных текстов кроме одного, где он будет определен полностью, может позволить сэкономить время компиляции.

Комментариев нет:

Отправить комментарий