#cpp
Можно ли извлечь какую-нибудь пользу от использования extern в с++? Допустим, например, что программа не использует глобальные переменные. Первая мысль что приходит на ум, так это попытаться использовать extern для использования функций, не объявляя при этом их в заголовке (вероятно это увеличит скорость компиляции - но ведь и может замедлить например скорость линковки). В общем немного не понятно, может это просто рудимент от с, и в с++ не имеет большого смысла.
Ответы
Ответ 1
Этот вопрос в общем-то отвечен в документации и на форуме 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). Декларация явной инстанциации шаблона (внешний шаблон) позволяет пропустить шаг неявного создания кода шаблона и вместо этого использовать экземпляр шаблона, описанный где-то еще (что привело бы к ошибкам редактора связей, если таковая не была произведена). В С++ декларация явной специализации во всех файлах исходных текстов кроме одного, где он будет определен полностью, может позволить сэкономить время компиляции.Ответ 2
Чаще всего extern используется для неявного совместного доступа к общим данным из разных модулей программы. Часто применяется при работе плохо спроектированными библиотеками. Проще создать глобальную переменную и подцепить ее через extern, чем писать несколько акцессоров. Единственным его преимуществом является только то, что на обмен данными не тратится дополнительное время, так как данные всегда под рукой у каждого модуля, и не требуется никакой синхронизации (только в однопоточном режиме). В современных реалиях оправдать использование extern можно только в ПО для микроконтроллеров, и только в исключительных ситуациях, когда быстродействие действительно важно. Его использование может сильно запутать стуктуру программы и привести к спагетти коду. Лучше придерживаться такого правила: если можно обойтись без extern, то нужно без него обойтись.
Комментариев нет:
Отправить комментарий