Информация об изменениях

Сообщение Re[5]: взаимодействие с коллегами от 12.10.2022 8:45

Изменено 12.10.2022 8:46 so5team

Re[5]: взаимодействие с коллегами
Здравствуйте, __kot2, Вы писали:

S>>я понял про #ifndef vs #pragma once, а вот часть про export не понял (разве что export был использован вместо extern).


S>>Ключевое слово "expert" в C++ мне не ведомо.

__>Насколько помню, если ничего не поменялось в новом стандарте как auto, export был нужен в древних компиляторах, где часть реализации шаблонов приходилось писать в cpp файлах, а не в хедерах.

Ключевое слово export было введено в C++98 для того, чтобы можно было выносить код шаблонов из заголовочных файлов.
На практике эта фича была реализована всего в одном малоизвестном и нераспространенном компиляторе (вроде бы EDG) и в дикой природе применения export templates не встречалось от слова совсем.

Поддержка export templates была объявлена как deprecated в C++11, но само ключевое слово в языке осталось как зарезервированное. Попытки его использовать в стандартах C++11/14/17 приводят к предупреждениям со стороны компилятора.

__>Современные компиляторы скорее всего это слово вообще игнорят, точно так же как они в один момент начали игнорить auto.

__>И про древние компиляторы которым export был нужен я имею в виду что-то примерно старше Моргенштерна . Кому оно нужно сейчас и правда непонятно

Начиная с C++20 у ключевого слова export появилась новая нагрузка: посредством export указывают сущности, которые должны экспортироваться их модулей (в C++20 в язык была добавлена система модулей).

Можно было бы предположить, что sergey2b работает над проектом уже в стандарте C++20, но тогда непонятно зачем export указывать в заголовочных файлах.

Кстати говоря, если sergey2b работает в рамках более ранних стандартов, где модулей еще нет, и перепутал export с extern, то все равно остается вопрос о том, а зачем в C++ декларации функции в заголовочных файлах помечать как extern.
Re[5]: взаимодействие с коллегами
Здравствуйте, __kot2, Вы писали:

S>>я понял про #ifndef vs #pragma once, а вот часть про export не понял (разве что export был использован вместо extern).


S>>Ключевое слово "expert" в C++ мне не ведомо.

__>Насколько помню, если ничего не поменялось в новом стандарте как auto, export был нужен в древних компиляторах, где часть реализации шаблонов приходилось писать в cpp файлах, а не в хедерах.

Ключевое слово export было введено в C++98 для того, чтобы можно было выносить код шаблонов из заголовочных файлов.
На практике эта фича была реализована всего в одном малоизвестном и нераспространенном компиляторе (вроде бы EDG) и в дикой природе применения export templates не встречалось от слова совсем.

Поддержка export templates была объявлена как deprecated в C++11, но само ключевое слово в языке осталось как зарезервированное. Попытки его использовать в стандартах C++11/14/17 приводят к предупреждениям со стороны компилятора.

__>Современные компиляторы скорее всего это слово вообще игнорят, точно так же как они в один момент начали игнорить auto.

__>И про древние компиляторы которым export был нужен я имею в виду что-то примерно старше Моргенштерна . Кому оно нужно сейчас и правда непонятно

Начиная с C++20 у ключевого слова export появилась новая нагрузка: посредством export указывают сущности, которые должны экспортироваться из модулей (в C++20 в язык была добавлена система модулей).

Можно было бы предположить, что sergey2b работает над проектом уже в стандарте C++20, но тогда непонятно зачем export указывать в заголовочных файлах.

Кстати говоря, если sergey2b работает в рамках более ранних стандартов, где модулей еще нет, и перепутал export с extern, то все равно остается вопрос о том, а зачем в C++ декларации функции в заголовочных файлах помечать как extern.