C ++, file di intestazione e utilizzo dello spazio dei nomi std

1

Quindi capisco che non si deve usare

using namespace std;

nei file di intestazione. Bene per il mio incarico, dobbiamo sovraccaricare l'operatore >> . Ho avuto il mio programma per funzionare e tutto, ma ho dovuto includere il

using namespace std;

Va bene farlo in questo modo? Ho tentato di sovraccaricare l'operatore senza includere quel comando nel file di intestazione, ma ho ricevuto un errore.

    
posta Anthony Campuzano 15.10.2015 - 01:27
fonte

2 risposte

2

bene ... non proprio. Quali sono i parametri dell'operatore << che stai per sovraccaricare?

Se stai solo fornendo alla tua classe un modo per essere scritta su uno stream, devi avere delle possibilità:

  1. all'interno del tuo spazio dei nomi, dichiara un std::ostream& operator<<(std::ostream& stream, const yourclass& intance) o ...
  2. all'interno dello spazio dei nomi std dichiara ostream& operator<<(ostream& stream, const yournamespace::yourclass& instance) qualunque sia più conveniente per l'interno del tuo corpo della funzione.

Non è necessario avere << come globale, poiché ADL lo troverà comunque, quando viene posizionato tra oggetti di cui corrispondono i tipi.

    
risposta data 12.06.2016 - 21:26
fonte
0

C ++ fa la risoluzione per nome, non per firma. Ciò significa che se due funzioni / variabili / variabili membro nello stesso ambito hanno lo stesso nome, possono entrare in conflitto. Quando fai qualcosa come using namespace std; , stai includendo lo spazio dei nomi intero std nel tuo codice.

Che cosa succederebbe se nel tuo codice fosse presente una funzione basata su modelli chiamata count che richiedeva 3 parametri come std::count ? Si otterrebbe un conflitto perché (dopo il nome di manomissione) entrambe le funzioni avrebbero lo stesso nome nello stesso ambito. È meglio includere solo le parti dello spazio dei nomi std che si desidera utilizzare, in modo da non introdurre potenziali errori nel codice quando si torna indietro per aggiornarlo.

Quindi, includere solo istruzioni come using std::cout; o using std::ostream; includerà solo quelle funzioni / tipi / typedefs / & c. nel tuo codice.

    
risposta data 13.04.2016 - 18:03
fonte

Leggi altre domande sui tag