Это область некоторого противоречия. Я предпочитаю, чтобы каждый заголовок был автономным, поэтому, если ему нужны другие заголовки, он включает их. Другими словами, если клиентский код должен будет включать <iostream>
(или что-то еще) в любом случае, ваш заголовок должен обрабатывать это для них. OTOH, если пользователь iostream строго скрыт, поэтому клиентскому коду вообще не нужно его включать, то он должен быть включен только в файл реализации.
Во многих случаях (особенно когда заголовок открыт для частых изменений), вы бы предпочли не включать его в заголовок. В таких случаях идиома PImpl может быть полезна для получения зависимости из заголовка.
Если вам нужно включить <iostream>
, сделайте одолжение своим клиентам и подумайте, можете ли вы хотя бы #include <iosfwd>
вместо <iostream>
. Это может улучшить время компиляции изрядной суммы.