Qual è la differenza tra cin e std:: cin?


Migliore risposta

std è uno spazio dei nomi. Gli spazi dei nomi sono stati aggiunti a C ++ STD 90. Nelle versioni precedenti di C ++, poiché non cerano spazi dei nomi, si usava cout e nel moderno C ++ si usava std :: cout.

Solo per completezza, ho per ricordare che se allinizio hai dichiarato di essere using namespace std;, cout significherà std::cout .

Ma questo non è un modo consigliato e dovrebbe essere evitato a favore di un nome std :: cout completo.

TL; DR; Gli spazi dei nomi impediscono conflitti di nomi in progetti di grandi dimensioni. std è lo spazio dei nomi delle librerie standard di C ++.

Spiegazione: esattamente come suggerisce il nome, gli spazi dei nomi vengono utilizzati per limitare lambito dei nomi univoci riducendo la possibilità di avere due entità con lo stesso nome. Ogni lingua ne ha bisogno e lo fornisce in un modo o nellaltro. Java, ad esempio, lo chiama pacchetto.

In un piccolo programma, diciamo 100-500 righe, sembra eccessivo avere una * caratteristica del linguaggio * per assicurarsi che tutti i nomi siano univoci o qualcosa del genere. Ma lo scontro di nomi può avvenire in modi più sottobanco. Se ho scritto una libreria che ha una classe chiamata XYZ, e un altro tuo amico ha scritto unaltra libreria che ha lo stesso nome di classe XYZ. (Le lezioni possono servire per scopi diversi o uguali, ma non importa.) Non avremo alcun problema ai nostri fini. Supponiamo ora di sviluppare un software e di utilizzare ENTRAMBE le librerie. Ora, il tuo progetto ha due definizioni di classe XYZ. Ciò interromperà semplicemente la compilazione, e anche se probabilmente non usi / hai bisogno di nessuna delle due classi, solo perché sono definite con lo stesso nome, sarà impossibile costruire qualsiasi codice con quelle due librerie insieme.

Gli spazi dei nomi risolvono questo problema. Io e il tuo amico avremo spazi dei nomi diversi per le nostre librerie. (Gli spazi dei nomi devono essere univoci a livello globale, e quindi molte volte includono anche lidentità del nome dellazienda dello sviluppatore, in modo che altri sviluppatori che scrivono una libreria non scelgano lo stesso spazio dei nomi per la loro libreria)

Un classico lesempio è la classe List in Java. Ci sono 2 elenchi. Uno è uninterfaccia per la struttura dati List. Altro è lelenco dei componenti Elenco GUI. Puoi utilizzarli entrambi in un programma e in tal caso li riferirai con nomi completi (java.util.List o java.awt.List). I pacchetti ti permettono di usare gli stessi nomi, altrimenti se proviamo ad aggiungerli entrambi, il compilatore non verrà mai a sapere quale List vuoi, e annuncerà un errore a causa di Ambiguity (avendo 2 significati ugualmente deducibili di una singola istruzione). >

std è il nome scelto per la libreria standard C ++.

Significa che tutto nelle librerie standard verrà trovato in std e nel codice verrà indicato come std :: cout, std :: string , std :: map e così via.

Significa anche che NON dovresti definire nulla nello spazio dei nomi std e dovresti creare uno spazio dei nomi separato ogni volta che scrivi una libreria, in modo da non inquinare spazio dei nomi std.

Risposta

Se stai usando un vecchio compilatore, allora semplicemente cin funzionerà bene.

Ma con il C ++ moderno, tutte le cose standard sono racchiuse nello spazio dei nomi std .

Gli spazi dei nomi aiutano a evitare conflitti di denominazione tra librerie o file di intestazione.

Quindi, se stai usando la compil ehm, allora devi importare lo spazio dei nomi breper puoi usarlo, o se non vuoi importare tutti i costrutti ma solo alcuni di essi allora usa std :: cin o std :: cout.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *