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;
risposta
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::
.
In generale (e sicuramente nei progetti di grandi dimensioni), è il migliore not to use it at all.
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.
La direttiva using
ha un ambito, quindi sarà effettiva solo nell'ambito in cui appare. Usalo ovunque sia più appropriato per la tua situazione.
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
.
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.
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..
- 1. "namespace std {}" prima di "using namespace std;"
- 2. Differenza di using namespace (std :: :: vs std: :)
- 3. sta usando namespace..come male?
- 4. namespace std sovraccarico meno di
- 5. Dove mettere try catch
- 6. Dove mettere le risorse?
- 7. Dove mettere persistence.xml nel jar della libreria usando maven?
- 8. WPF MahApps.Metro - Dove mettere ResourceDictionaries?
- 9. GCC std :: thread non trovato nel namespace std
- 10. namespace "std" non ha alcun membro "sort"
- 11. dove mettere add_action() in wordpress.?
- 12. Dove mettere il file .htaccess?
- 13. Dove mettere le classi interne?
- 14. Dove mettere la funzione Firebase.setAndroidContext()
- 15. Dove mettere implicitamenteWait in Protractor?
- 16. std :: thread class vs std :: this_thread namespace in C++?
- 17. perché namespace anteporre ::, ad esempio :: std :: vector
- 18. std :: make_unique, namespace anonimo e ODR
- 19. ember-cli dove mettere le immagini
- 20. dove mettere il database di informazioni sensibili
- 21. Come mettere "null" nella colonna usando HQL?
- 22. Dove mettere il repository Git in Eclipse?
- 23. dove mettere i file JS in CodeIgniter
- 24. Prisma WPF - Dove mettere le risorse?
- 25. Dove mettere i caratteri in yii2?
- 26. Dove mettere un file delle proprietà?
- 27. Dove mettere tutto il codice JavaScript jQuery?
- 28. Dove mettere domande comuni su Django?
- 29. dove dovrei mettere in removeObserver AppDelegate.m, ios
- 30. CakePHP - dove mettere la logica di servizio
Non mettere da nessuna parte! –
@ Martin: Meh, è eccessivamente restrittivo. Esistono molti piccoli progetti/file in cui aggiungere un 'using namespace std;' non causerà problemi. –
Assolutamente mai, mai messo in un file di intestazione. La cosa migliore è non usare mai 'using namespace std' ovunque. Sono d'accordo con Martin. –