2011-01-27 10 views

risposta

12

Per "file di implementazione della funzione" si intendono i file .h oi file .cpp? (Normalmente chiamerei file di "implementazione" file .cpp, mentre i file .hp sono file di "interfaccia".)

Se si intende, i file .cpp, quindi, naturalmente. Questo è dove normalmente vedi using namespace std. Significa che tutto il codice in questo file .cpp ha accesso a std senza qualificazione.

Se si intendono i file .h, allora si può, ma non si dovrebbe. Se lo includi in un file .h, verrà automaticamente applicato a qualsiasi file .cpp che include il file .h, che potrebbe essere un sacco di file. Generalmente non vuoi dire a altri moduli quali spazi dei nomi da importare. È preferibile inserirlo in ogni file .cpp piuttosto che in un file .h comune.

+0

Sì, intendo i file cpp. Uso il namespace std nel file cpp principale e "std ::" nella funzione .cpp (non nelle funzioni principali), quindi sono curioso di usare namespace nel file cpp della funzione. – Sean

+2

@Sean: non ci sono regole speciali per il file .cpp "principale". Ci sono solo alcune regole sulla funzione 'main' _function_ (può solo' int' eccetera) ma quelle regole non hanno alcun effetto sulle altre funzioni o classi che sono definite nello stesso file. – MSalters

4

se per "file di implementazione della funzione" si intendono i file .C/.cpp ecc., È possibile, tuttavia, provare ad evitare. Inietta invece solo ciò di cui hai bisogno, ad esempio se hai bisogno di <iostream> per std::cout, std::endl, inserisci questi due in, using std::cout; e using std::endl;, ora puoi semplicemente scrivere cout e endl.

6

Sto assumendo vuoi dire qualcosa di simile:

// Foo.h 

void SayHello(); 

...

// Foo.cpp 

#include "Foo.h" 

using namespace std; 

void SayHello() 
{ 
    cout << "Hello, world!" << endl; 
} 

Se questo è il caso, allora sì. Tuttavia, è considerato una cattiva pratica utilizzare using namespace std; in progetti di dimensioni maggiori.

+1

Proverei a evitare di utilizzare "using namespace" anche nei file di implementazione, se in un secondo momento si desidera utilizzare una singola unità di traduzione si avranno conflitti di nomi. – GameDeveloper

70

Forse ti piacerebbe sapere anche che puoi inserire using namespace std; all'interno di un corpo di una funzione, come di seguito. Ciò limiterà l'ambito dell'istruzione using namespace.

void f() { 
    using namespace std; 
    cout << "Foo" << endl; 
    //.. 
}; 

void g() { 
    cout << "Bar" << endl; //ERROR: cout and endl are not declared in this scope. 
}; 

Questo può essere utile se si desidera utilizzare un sacco di elementi di uno spazio dei nomi nel corpo di una funzione che è scritto in un file di intestazione (che non si dovrebbe di per sé, ma a volte è OK o anche quasi necessario (es. modelli)).

Problemi correlati