Mi a különbség a cin és az std között:: cin?


Legjobb válasz

Az std névtér. Névterek kerültek a C ++ STD 90-hez. A C ++ régebbi verzióiban, mivel nem volt névtér, a cout-ot használtad, a modern C ++ -nál pedig az std :: cout-ot.

Csak a teljesség kedvéért megemlíteni, hogy ha a tetején kijelentette, hogy using namespace std; vagy, akkor cout std::cout .

De ez nem ajánlott módszer, és kerülni kell a teljesen minősített std :: cout név mellett.

TL; DR; A névterek megakadályozzák a névütközéseket nagy projektekben. Az std a C ++ szabványos könyvtárainak névtere.

Magyarázat: Pontosan, ahogy a neve is sugallja, a névtereket arra használják, hogy korlátozzák az egyedi nevek körét, csökkentve annak lehetőségét, hogy két entitás azonos névvel rendelkezzen. Minden nyelvnek szüksége van rá, és biztosítja ezt valamilyen módon. A Java például csomagnak hívja.

Kis programban, mondjuk 100–500 sor, túlzásnak hangzik, ha * nyelvi funkcióval rendelkezik *, hogy minden név egyedi vagy ilyesmi legyen. De a névütközés több asztal alatti módon történhet. Ha olyan könyvtárat írtam, amelynek van egy XYZ nevű osztálya, és a másik barátod írt egy másik könyvtárat, amelynek egyébként ugyanaz az osztály neve XYZ. (Az órák különböző célokra vagy ugyanazokra szolgálhatnak, de ez nem számít.) A végünkön nem lesz semmi probléma. Most tegyük fel, hogy fejleszt egy szoftvert, és MINDKET használja a könyvtárakat. A projektjének történetesen két meghatározása van az XYZ osztályról. Ez egyszerűen meg fogja bontani a felépítést, és még akkor is, ha valószínűleg nem használja / szükséges a két osztály egyikét, csak azért, mert ugyanazon a néven vannak definiálva, lehetetlen bármilyen kódot felépíteni a két könyvtárral együtt.

A névterek megoldják ezt a problémát. Nekem és a barátodnak különböző névterek lesznek a könyvtárak számára. (A névtereknek globálisan egyedinek kell lenniük, ezért sokszor tartalmazzák a fejlesztői cégnév identitását is, hogy más könyvtárat író fejlesztők ne ugyanazt a névteret válasszák a könyvtárukhoz)

Klasszikus példa erre a List osztály Java-ban. 2 lista van. Az egyik egy interfész az adatstruktúra-listához. A másik a GUI lista összetevőinek listája. Használhatja mindkettőt egy programban, és ebben az esetben teljesen minősített nevekkel fogja őket hivatkozni (java.util.List vagy java.awt.List). A csomagok lehetővé teszik azonos nevek használatát, különben, ha megpróbáljuk mindkettőt felvenni, a fordító soha nem fogja megtudni, hogy melyik listát szeretné, és hibát jelent be a Kétértelműség miatt (egyetlen utasításnak 2 ugyanolyan levonható jelentése van).

Az std a C ++ Standard Library nevét választja.

Ez azt jelenti, hogy a standard könyvtárakban minden megtalálható az std alatt, a kódban pedig std :: cout, std :: string , std :: map és így tovább.

Ez azt is jelenti, hogy NEM definiálhat semmit az std névtérben, és külön névteret kell létrehoznia, amikor könyvtárat ír, így nem szennyezi std névtér.

Válasz

Ha régi fordítót használ, akkor egyszerűen a cin jól fog működni.

De a modern C ++ esetében az összes szokásos dolog be van csomagolva a std névtérbe.

A névterek segítenek elkerülni az elnevezési ütközéseket könyvtárak vagy fejlécfájlok.

Tehát ha modern fordítást használ er, akkor importálnod kell a névteret, mielőtt használhatod, vagy ha nem az összes konstrukciót akarod importálni, hanem csak néhányat, akkor használd a std :: cin vagy std :: cout.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük