Mitä eroa on cin: llä ja std:: cin?


Paras vastaus

std on nimitila. Nimitilat lisättiin C ++ STD 90. Koska C ++: n vanhemmissa versioissa ei ollut nimitilaa, käytit coutia ja nykyaikaisessa C ++: ssa std :: cout.

Aivan täydellisyyden vuoksi minulla on mainita, että jos ilmoitit ylhäällä olevasi using namespace std;, cout tarkoittaa std::cout .

Mutta se ei ole suositeltava tapa, ja sitä tulisi välttää täysin pätevän std :: cout-nimen hyväksi.

TL; DR; Nimitilat estävät nimiristiriidat suurissa projekteissa. std on C ++: n standardikirjastojen nimitila.

Selitys: Aivan kuten nimestä voi päätellä, nimitiloja käytetään rajoittamaan yksilöllisten nimien soveltamisalaa vähentämällä mahdollisuutta saada kaksi entiteettiä samalla nimellä. Jokainen kieli tarvitsee sitä ja tarjoaa sen jollakin tavalla. Java kutsuu sitä esimerkiksi paketiksi.

Pienessä ohjelmassa, sanotaan 100–500 riviä, kuulostaa ylimieliseltä, jos * kieliominaisuus * varmistaa, että kaikki nimet ovat yksilöllisiä tai jotain sellaista. Mutta nimiristiriita voi tapahtua pöydän alla olevilla tavoilla. Jos kirjoitin kirjaston, jolla on luokka nimeltä XYZ, ja toinen ystäväsi kirjoitti toisen kirjaston, jolla on muuten sama luokan nimi XYZ. (Luokat voivat palvella eri tarkoituksiin tai samoja, mutta sillä ei ole väliä.) Meillä ei ole mitään ongelmia loppumme kohdalla. Oletetaan, että kehität nyt ohjelmistoa ja käytät molempia kirjastoja. Projektissasi sattuu olemaan kaksi määritelmää luokassa XYZ. Se yksinkertaisesti rikkoo koontiversiota, ja vaikka et todennäköisesti käyttäisikään / tarvitsisi kahta luokkaa, vain koska ne on määritelty samalla nimellä, on mahdotonta rakentaa koodia näiden kahden kirjaston kanssa yhdessä. >

Nimitilat ratkaisevat tämän ongelman. Minulla ja ystäväsi on eri nimitilat kirjastoillemme. (Nimitilojen on oltava maailmanlaajuisesti ainutlaatuisia, ja siksi monta kertaa niihin sisältyy myös kehittäjän yrityksen nimi, jotta jotkut muut kirjastoa kirjoittavat kehittäjät eivät valitse samaa nimitilaa kirjastoonsa.)

Klassinen esimerkki on Java-luokan List-luokka. Luetteloita on 2. Yksi on käyttöliittymä tietorakenneluettelolle. Muu on GUI-luettelon komponenttiluettelo. Voit käyttää molempia ohjelmassa ja tällöin viittaat niihin täydellisillä nimillä (java.util.List tai java.awt.List). Pakettien avulla voit käyttää samoja nimiä, muuten, jos yritämme lisätä molemmat, kääntäjä ei koskaan tiedä haluamaasi luetteloa ja ilmoittaa virheestä epäselvyyden vuoksi (jolla on 2 yhtä vähennyskelpoista merkitystä yhdellä lauseella).

std on nimi, joka on valittu C ++ – standardikirjastolle.

Se tarkoittaa, että kaikki vakiokirjastoissa löytyy std: stä ja koodissa viitataan nimellä std :: cout, std :: string , std :: map ja niin edelleen.

Se tarkoittaa myös sitä, että EI pidä määritellä mitään vakiotyyppisessä nimiavaruudessa ja luoda erillinen nimitila aina, kun kirjoitat kirjastoa, joten et saastuta vakio nimitila.

Vastaus

Jos käytät vanhaa kääntäjää, yksinkertaisesti cin toimii hyvin.

Mutta nykyaikaisessa C ++: ssa kaikki tavalliset tavarat on kääritty nimitilaan std .

Nimitilat auttavat välttämään nimien ristiriitoja kirjastoja tai otsikkotiedostoja.

Joten jos käytät modernia kääntää eee, sinun on sitten tuotava nimitila, ennen kuin voit käyttää sitä, tai jos et halua tuoda kaikkia rakenteita, mutta vain joitain niistä, käytä std :: cin tai vakio :: cout.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *