Qual è l’intestazione ?

Qual è l’intestazione usata (menzionata in questo file )?

Perché è necessario?

Qualche esempio?

È così che puoi dichiarare, nelle tue intestazioni, i metodi che si basano sulle dichiarazioni dei tipi iostream senza dover #include le intestazioni iostream, che sono grandi, complesse e lente da compilare.

Ecco un semplice esempio:

 // foo.h #include  void sucker(std::iostream& is); 

 // foo.cc #include  void sucker(std::iostream& is) { is >> somevar; } 

Come menzionato da @Marcelo Cantos , è ansible includere la dichiarazione delle classi e delle funzioni iostream senza includere le definizioni complete. In C e C ++, una dichiarazione è una dichiarazione che dice “ecco il nome di qualcosa (una funzione / class / ecc.), Ma non ho intenzione di dirti altro su di esso oltre al suo nome”. Per una funzione, si intende il nome della funzione, ma non il corpo contenente il codice della funzione. Per una class, si intende il nome della class ma non le variabili o i metodi membri della class.

Viceversa, una definizione è la definizione completa: il corpo della funzione, i membri della class, ecc.

Spesso è sufficiente la dichiarazione di qualcosa da usare, nel caso di una funzione, non è necessario sapere come si presenta il corpo della funzione per chiamarla (tranne nel caso di funzioni basate su modelli o inline). Allo stesso modo, con una class, non è necessario sapere quali membri della class hanno se tutto ciò che si sta facendo è passare intorno a puntatori o riferimenti a istanze di quella class. Ma non appena è necessario accedere a una variabile membro o chiamare un metodo di class, allora è necessaria la definizione completa.

Includendo solo le dichiarazioni invece delle definizioni, la quantità totale di codice che il compilatore deve elaborare è molto, molto meno, e quindi la compilazione procederà molto più rapidamente.

Per darti un’idea di quanto codice viene elaborato, ecco quanto codice è contenuto nella mia implementazione locale:

 # The following commands create a source file that includes a single header # file (on stdout), preprocess it with g++ -E, and then count how many lines # are in the resulting preprocessed output $ echo '#include ' | g++ -E -xc++ - | wc 2598 6534 57875 $ echo '#include ' | g++ -E -xc++ - | wc 25631 59613 631998 

Un file che include , il compilatore deve elaborare 2598 righe di codice da vari file di intestazione, mentre un file che include deve elaborare un enorme 25631 righe di codice. Questo è prima di compilare il codice reale che ti interessa nel tuo file sorgente!

Fondamentalmente quando si utilizza è perché si desidera eliminare le dipendenze in fase di compilazione.

Usa posto delle tradizionali intestazioni di streaming ( e amici) in modo da evitare di includere la definizione dell’intera roba di streaming. Con stai solo facendo una dichiarazione in avanti di tutto lo streaming.

Ho trovato particolarmente utile questo collegamento: http://www.gotw.ca/gotw/007.htm