Использование импорта с простыми заголовочными файлами

Является ли хорошей практикой избавление от #include и использование только ключевого слова import даже для заголовков (например, <span> или "Foo.h")? Есть ли в этом какие-то преимущества? Возможные минусы? Увеличивает ли это время сборки?

cppreference имеет пример, в котором он говорит следующее:

import <set>; // imports a synthesized header unit formed from header

Что именно означает синтезированный в этом контексте?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
49
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Are there any benefits to this?

Импорт синтезированных блоков заголовков вместо включения заголовка может удовлетворить руководство по стилю, которое хочет использовать один тип директивы как для модулей, так и для заголовков.

Any possible downsides?

Он не будет работать ни в коде, предшествующем C++20, ни в компиляторах, которые еще не реализовали импорт файлов заголовков. Это не имеет значения, если вы также используете модули, поскольку они также не будут работать до C++20.

Ницца. Другой вопрос, играет ли роль препроцессор при использовании import?

digito_evo 17.03.2022 10:23

@digito_evo Да, заголовок будет предварительно обработан.

eerorika 17.03.2022 10:25

Целью этой функции является компиляция заголовка (включая, например, предварительную обработку и синтаксический анализ, но не все экземпляры шаблона) однажды, а не один раз для каждой единицы перевода, которая его использует. Это работает только в том случае, если ваши файлы заголовков «хорошо себя ведут» в том смысле, что они включают все, что им нужно (что не считается хорошей идеей с повсеместно) и не содержат зависеть в порядке включения или определениях внешних макросов. Это, как правило, делает первую импортирующую единицу перевода немного медленнее, но значительно ускоряет создание любых импортеров последующий.

«Синтезированный» относится к тому факту, что компилятор действует так, как если бы заголовочный файл был файлом источник, который был направлен для компиляции отдельно, а не просто как часть единицы трансляции.

Другие вопросы по теме