Hva er forskjellen mellom cin og std:: cin?


Beste svaret

std er et navneområde. Navneplasser ble lagt til C ++ STD 90. I eldre versjoner av C ++, siden det ikke var noe navneområde, brukte du cout og i moderne C ++ vil du bruke std :: cout.

Bare for fullstendighets skyld har jeg å nevne at hvis du øverst erklærte at du er using namespace std; så vil cout bety std::cout .

Men det er ikke en anbefalt måte, og bør unngås til fordel for fullt kvalifisert std :: cout-navn.

TL; DR; Navneplasser forhindrer navnekonflikter i store prosjekter. std er navneområdet til Standardbiblioteker for C ++.

Forklaring: Akkurat som navnet antyder, brukes navnerom for å begrense omfanget av unike navn, noe som reduserer muligheten for å ha to enheter med samme navn. Hvert språk trenger det, og gir det på en eller annen måte. Java kaller det for eksempel pakke.

I et lite program, si 100–500 linjer, høres det ut som en overkill å ha en * språkfunksjon * for å sikre at alle navn er unike eller noe sånt. Men navnekollisjon kan skje på flere måter under bordet. Hvis jeg skrev et bibliotek som har en klasse som heter XYZ, og en annen venn skrev et annet bibliotek som for øvrig har samme klassenavn XYZ. (Klassene kan tjene til forskjellige formål eller det samme, men det betyr ikke noe.) Vi har ikke noe problem i endene. Anta nå at du utvikler en programvare og bruker BÅDE bibliotekene. Nå har prosjektet ditt to definisjoner av klasse XYZ. Det vil bare bryte bygningen, og selv om du sannsynligvis ikke bruker / trenger noen av de to klassene, bare fordi de er definert med samme navn, vil det være umulig å bygge noen kode med de to bibliotekene sammen.

Navnerom løser dette problemet. Jeg og vennen din vil ha forskjellige navneområder for bibliotekene våre. (Navneplasser må være globalt unike, og inkluderer derfor ofte utviklerens firmanavnidentitet, slik at noen andre utviklere som skriver et bibliotek ikke velger det samme navneområdet for biblioteket)

En klassisk eksempel er List-klasse i Java. Det er to lister. Den ene er et grensesnitt for datastrukturen List. Annet er GUI List komponentlisten. Du kan bruke dem begge i et program, og i så fall vil du henvise dem til fullt kvalifiserte navn (java.util.List eller java.awt.List). Med pakkene kan du bruke samme navn, ellers hvis vi prøver å legge til begge deler, vil kompilatoren aldri vite hvilken liste du vil ha, og vil kunngjøre feil på grunn av tvetydighet (har to like fradragsberettede betydninger av en enkelt uttalelse). >

std er navnet som er valgt for C ++ Standardbibliotek.

Det betyr at alt i standardbiblioteker vil bli funnet under std, og i kode vil bli referert til som std :: cout, std :: string , std :: map og så videre.

Det betyr også at du IKKE skal definere noe i std-navneområdet, og skal opprette et eget navneområde når du skriver et bibliotek, slik at du ikke forurenser std navneområde.

Svar

Hvis du bruker gammel kompilator, vil bare cin fungere bra.

Men med moderne C ++ er alle standard ting pakket inn i std navneområdet.

Navneplasser hjelper til med å unngå navngivning av konflikter mellom biblioteker eller topptekstfiler.

Så hvis du bruker moderne kompilering er, så må du importere navneområdet brefor du kan bruke det, eller hvis du ikke vil importere alle konstruksjonene, men bare noen av dem, så bruk std :: cin eller std :: cout.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *