Hvad er forskellen mellem cin og std:: cin?


Bedste svar

std er et navneområde. Navneområder blev føjet til C ++ STD 90. I ældre versioner af C ++, da der ikke var noget navneområde, brugte du cout og i moderne C ++ bruger du std :: cout.

Bare for fuldstændighedens skyld har jeg at nævne, at hvis du øverst erklærede, at du er using namespace std;, så vil cout betyde std::cout .

Men det er ikke en anbefalet måde og bør undgås til fordel for fuldt kvalificeret std :: cout navn.

TL; DR; Navneområder forhindrer navnekonflikter i store projekter. std er navneområdet for Standardbiblioteker for C ++.

Forklaring: Præcis som navnet antyder, bruges navneområder til at begrænse omfanget af unikke navne, hvilket reducerer muligheden for at have to enheder med samme navn. Hvert sprog har brug for det og giver det på en eller anden måde. Java kalder det f.eks. Pakke.

I et lille program, sig 100-500 linjer, lyder det som en overdreven brug at have en * sprogfunktion * for at sikre, at alle navne er unikke eller noget lignende. Men navnekollision kan ske på flere måder under bordet. Hvis jeg skrev et bibliotek, der har en klasse ved navn XYZ, og din anden ven skrev et andet bibliotek, som i øvrigt har det samme klassenavn XYZ. (Klasser kan tjene til forskellige formål eller det samme, men det betyder ikke noget.) Vi har ikke noget problem ved vores ender. Antag nu, at du udvikler en software og bruger BÅDE bibliotekerne. Nu har dit projekt tilfældigvis to definitioner af klasse XYZ. Det vil simpelthen bryde buildet, og selvom du sandsynligvis ikke bruger / har brug for nogen af ​​de to klasser, bare fordi de er defineret med samme navn, vil det være umuligt at opbygge nogen kode med de to biblioteker sammen.

Navneområder løser dette problem. Mig og din ven vil have forskellige navneområder til vores biblioteker. (Navneområder skal være unikke globalt og inkluderer derfor ofte udviklerens firmanavnidentitet, så nogle andre udviklere, der skriver et bibliotek, ikke vælger det samme navneområde til deres bibliotek)

En klassisk eksempel er listeklasse i Java. Der er 2 lister. Den ene er en grænseflade til datastrukturlisten. Andet er GUI List komponentlisten. Du kan bruge dem begge i et program, og i så fald vil du henvise dem til fuldt kvalificerede navne (java.util.List eller java.awt.List). Pakkerne giver dig mulighed for at bruge de samme navne, ellers hvis vi forsøger at tilføje begge dele, vil compileren aldrig vide, hvilken liste du vil have, og vil annoncere fejl på grund af tvetydighed (har 2 lige så fradragsberettigede betydninger af en enkelt sætning).

std er navnet valgt til C ++ Standardbibliotek.

Det betyder, at alt i standardbiblioteker findes under std, og i kode vil blive henvist til som std :: cout, std :: string , std :: map og så videre.

Det betyder også, at du IKKE skal definere noget i std-navneområdet og skal oprette et separat navneområde, hver gang du skriver et bibliotek, så du ikke forurener std navneområde.

Svar

Hvis du bruger en gammel compiler, fungerer cin fint.

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

Navneområder hjælper med at undgå navngivning af konflikter mellem biblioteker eller headerfiler.

Så hvis du bruger moderne kompilering er, så skal du importere navneområdet brefor, du kan bruge det, eller hvis du ikke vil importere alle konstruktionerne, men kun nogle af dem, skal du bruge std :: cin eller std :: cout.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *