2011-06-24 17 views
13

Mi chiedo dove mettere using namespace std;. Ho visto un codice con lo using namespace std; nello int main(){} ma lo stavo inserendo dopo #include <iostream>. Dove dovrei metterlo e fa alcuna differenza dove l'ho messo?dove mettere usando namespace std;

+8

Non mettere da nessuna parte! –

+3

@ Martin: Meh, è ​​eccessivamente restrittivo. Esistono molti piccoli progetti/file in cui aggiungere un 'using namespace std;' non causerà problemi. –

+2

Assolutamente mai, mai messo in un file di intestazione. La cosa migliore è non usare mai 'using namespace std' ovunque. Sono d'accordo con Martin. –

risposta

11

Fa un enorme differenza dove lo metti.

Se lo si inserisce in una funzione, si applica solo a tale funzione.

Se lo si mette all'esterno di una funzione in ambito globale, si applica a tutto ciò che segue quel punto.

Se lo si mette all'esterno di una funzione in ambito globale in un file di intestazione, verrà applicato anche a un file che include quell'intestazione.

In genere, è molto sconsigliabile utilizzarlo a livello globale in un'intestazione, e pratica semi-cattiva per utilizzarlo a livello globale poiché in Unity builds, la distinzione tra intestazioni e file di origine è sfocata.

Si consiglia di utilizzarlo semplicemente nelle funzioni necessarie o addirittura non utilizzarlo affatto e solo prefissare le funzioni/classi di libreria standard con std::.

13

Aggiungendolo all'interno di una funzione si limita l'ambito dell'istruzione using solo a quella funzione. Non si dovrebbe mai inserire un'istruzione using all'interno di un'intestazione per evitare conflitti per gli utenti dei file di intestazione.

Mettendolo sopra il main nel file scope va bene se si sa che non si verificheranno conflitti, ma anche questo potrebbe causare problemi con altri tipi importati e generalmente è da evitare in progetti di dimensioni moderate. Cerco di evitare il più possibile l'inquinamento dello spazio dei nomi globale, ma se sto scrivendo un file di implementazione di dimensioni ridotte, aggiungerò uno using namespace std; nella parte superiore per comodità.

Nel tuo caso, supponendo che si desidera utilizzare solo std::cout e std::cin (solo un esempio), si può fare questo:

using std::cout; 
using std::cin; 

Ora è possibile scrivere cin >> whatever e cout << whatever senza poter beneficiare pienamente del tipo/object ogni tempo e evitate anche di inquinare lo spazio dei nomi globale.

6

La direttiva using ha un ambito, quindi sarà effettiva solo nell'ambito in cui appare. Usalo ovunque sia più appropriato per la tua situazione.

0

Porterà tutto nello spazio std ovunque lo si metta. Se è allo scope del file, conta ovunque nel file, se è in una funzione, si applica solo all'interno della funzione, quindi dipende da ciò che si desidera. Personalmente, non mi piace dichiarare using namespace std.

2

Se non ti piace digitare std :: ovunque (io, non riesco a ottenere abbastanza due-due nel mio codice!), La pratica migliore è di importare selettivamente i nomi che vuoi in un ambito in questo modo:

void some_function() 
{ 
    using std::vector; 

    vector<int> x; 
    ... 
} 

Va bene anche a use nomi selezionati nell'ambito globale.

In questo modo non si inseriscono TUTTI i nomi nella libreria standard nello spazio dei nomi globale.

0

Un sacco di gente qui dirà che non dovresti usarlo affatto. La ragione di ciò è che potrebbero esserci dei conflitti se si definisce accidentalmente una funzione che si trova già nello spazio dei nomi std, per progetti molto grandi questo potrebbe essere difficile da rintracciare. Per i programmi banali, non è onestamente un grosso problema, ma dove lo metti, fa la differenza.

Nell'ambito globale, si applica ovunque. In un ambito locale (cioè, solo in main()), si applicherà solo in main.

Ecco alcune alternative buone alternative

  • Put std :: prima che tutto cioè, std::cout << "Hello, World!" << std::endl;
  • Utilizzare solo la cosa specifica che si desidera all'interno di una funzione.

Un esempio di utilizzo uniche cose che si desidera in una funzione locale:

int main() 
{ 
    using std::cout; 
    using std::endl; 
    cout << "Hello, World!" << endl; 
    return 0; 
} // Obviously you need #include <iostream> at the top..