Ежедневный бит(e) C++ #260, заголовок ‹iosfwd›.
Включение заголовка ‹iostream>< может существенно повлиять на время компиляции, поскольку это один из тяжелых стандартных заголовков C++.
В качестве альтернативы, особенно для заголовков библиотек, заголовок ‹iosfwd>< предоставляет только предварительное объявление, что делает его по существу бесплатным.
Поскольку нам нужно объявить только функции вставки и извлечения потока, заголовка ‹iosfwd>< будет достаточно.
// Sufficient for declarations #include <iosfwd> struct X { // Declare stream insertion friend std::ostream& operator<<(std::ostream&, const X&); // Declare stream extraction friend std::istream& operator>>(std::istream&, X&); int x; }; // Required for definitions #include <iostream> // Implement stream insertion std::ostream& operator<<(std::ostream& s, const X& x) { return s << x.x; } // Implement stream extraction std::istream& operator>>(std::istream& s, X& x) { return s >> x.x; }
Откройте пример в Compiler Explorer.