Care este diferența dintre cin și std:: cin?


Cel mai bun răspuns

std este un spațiu de nume. Spațiile de nume au fost adăugate la C ++ STD 90. În versiunile mai vechi de C ++, deoarece nu exista spațiu de nume, ați folosit cout și în C ++ modern veți folosi std :: cout.

Doar din motive de completitudine, am să menționăm că, dacă ați declarat în partea de sus că sunteți using namespace std;, atunci cout va însemna std::cout .

Dar acesta nu este un mod recomandat și trebuie evitat în favoarea numelui std :: cout complet calificat.

TL; DR; Spațiile de nume împiedică conflictele de nume în proiecte mari. std este spațiul de nume al bibliotecilor standard din C ++.

Explicație: Exact așa cum sugerează și numele, spațiile de nume sunt utilizate pentru a limita domeniul de aplicare al numelor unice, reducând posibilitatea de a avea două entități cu același nume. Fiecare limbă are nevoie de ea și o oferă într-un fel sau altul. Java îl numește pachet, de exemplu.

În programul mic, să zicem 100-500 de linii, sună ca o exagerare dacă ai o caracteristică * de limbă * pentru a te asigura că toate numele sunt unice sau ceva de genul acesta. Dar conflictul de nume se poate întâmpla în mai multe moduri sub tabel. Dacă am scris o bibliotecă care are o clasă numită XYZ, iar alt prieten al tău a scris o altă bibliotecă care întâmplător are același nume de clasă XYZ. (Cursurile pot servi în scopuri diferite sau identice, dar asta nu contează.) Nu vom avea nicio problemă la sfârșitul nostru. Acum, să presupunem că dezvolți un software și folosești AMBE bibliotecile. Acum, proiectul dvs. are două definiții ale clasei XYZ. Acest lucru va sparge pur și simplu construirea și, chiar dacă probabil nu utilizați / nu aveți nevoie de niciuna dintre cele două clase, doar pentru că sunt definite cu același nume, va fi imposibil să construiți orice cod cu aceste două biblioteci împreună.

Spațiile de nume rezolvă această problemă. Eu și prietenul tău vom avea spații de nume diferite pentru bibliotecile noastre. (Spațiile de nume trebuie să fie unice la nivel global și, prin urmare, de multe ori includ și identitatea numelui companiei dezvoltatorului, astfel încât unii alți dezvoltatori care scriu o bibliotecă să nu aleagă același spațiu de nume pentru biblioteca lor)

exemplu este clasa List în Java. Există 2 liste. Una este o interfață pentru lista structurii de date. Altă este lista de componente GUI List. Le puteți utiliza pe amândouă într-un program și, în acest caz, le veți referi cu nume complet calificate (java.util.List sau java.awt.List). Pachetele vă permit să utilizați aceleași nume, altfel dacă încercăm să le adăugăm pe ambele, compilatorul nu va ajunge niciodată să știe ce Listă doriți și va anunța o eroare din cauza Ambiguității (având 2 semnificații la fel deductibile ale unei singure declarații).

std este numele ales pentru biblioteca standard C ++.

Înseamnă că totul din bibliotecile standard va fi găsit sub std, iar în cod va fi denumit std :: cout, std :: string , std :: map și așa mai departe.

De asemenea, înseamnă că NU trebuie să definiți nimic în spațiul de nume std și ar trebui să creați un spațiu de nume separat ori de câte ori scrieți o bibliotecă, astfel încât să nu poluați spațiu de nume std.

Răspuns

Dacă utilizați un vechi compilator, atunci pur și simplu cin va funcționa bine.

Dar cu C ++ modern, toate elementele standard sunt înfășurate în spațiul de nume std .

Spațiile de nume ajută la evitarea conflictelor de nume între biblioteci sau fișiere antet.

Deci, dacă utilizați compil modern er, atunci trebuie să importați spațiul de nume bre pentru al putea folosi, sau dacă doriți să nu importați toate constructele, ci doar unele dintre ele, utilizați std :: cin sau std :: cout.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *