Vad är skillnaden mellan cin och std:: cin?


Bästa svaret

std är ett namnområde. Namnytor lades till C ++ STD 90. I äldre versioner av C ++, eftersom det inte fanns något namnutrymme, använde du cout och i modern C ++ kommer du att använda std :: cout.

Bara för fullständighetens skull har jag att nämna att om du överst förklarade att du är using namespace std; så betyder cout std::cout .

Men det är inte ett rekommenderat sätt och bör undvikas till förmån för fullt kvalificerat std :: cout-namn.

TL; DR; Namnytor förhindrar namnkonflikter i stora projekt. std är namnområde för standardbibliotek för C ++.

Förklaring: Exakt som namnet antyder används namnområden för att begränsa omfattningen av unika namn vilket minskar möjligheten att ha två enheter med samma namn. Varje språk behöver det och tillhandahåller det på något eller annat sätt. Java kallar det till exempel paket.

I litet program, säg 100–500 rader, låter det som en överdrift att ha en * språkfunktion * för att se till att alla namn är unika eller något liknande. Men namnkollision kan hända på fler sätt under bordet. Om jag skrev ett bibliotek som har en klass som heter XYZ, och din andra vän skrev ett annat bibliotek som för övrigt har samma klassnamn XYZ. (Klasserna kan tjäna för olika ändamål eller samma, men det spelar ingen roll.) Vi har inga problem vid våra ändar. Antag nu att du utvecklar en programvara och använder BÅDE biblioteken. Nu har ditt projekt råkar ha två definitioner av klass XYZ. Det kommer helt enkelt att bryta byggnaden, och även om du förmodligen inte använder / behöver någon av de två klasserna, bara för att de är definierade med samma namn, är det omöjligt att bygga någon kod med de två biblioteken tillsammans.

Namnområden löser problemet. Jag och din vän kommer att ha olika namnområden för våra bibliotek. (Namnytor måste vara globalt unika och inkluderar därför ofta utvecklarens företagsnamnidentitet, så att vissa andra utvecklare som skriver ett bibliotek inte väljer samma namnområde för sitt bibliotek)

En klassisk exempel är Listklass i Java. Det finns två listor. Den ena är ett gränssnitt för datastrukturen List. Annat är GUI List komponentlistan. Du kan använda dem båda i ett program och i så fall hänvisa dem till fullt kvalificerade namn (java.util.List eller java.awt.List). Med paketen kan du använda samma namn, annars om vi försöker lägga till båda kommer kompilatorn aldrig att veta vilken lista du vill ha, och kommer att meddela fel på grund av tvetydighet (med två lika avdragsgilla betydelser av ett enda uttalande).

std är namnet som valts för C ++ Standardbibliotek.

Det betyder att allt i standardbibliotek kommer att hittas under std, och i kod kommer att hänvisas till som std :: cout, std :: string , std :: map och så vidare.

Det betyder också att du INTE ska definiera något i std-namnområdet och ska skapa ett separat namnområde när du skriver ett bibliotek så att du inte förorenar std namnområde.

Svar

Om du använder en gammal kompilator fungerar helt enkelt cin bra.

Men med modern C ++ är alla vanliga saker inslagna i std namnområdet.

Namnytor hjälper till att undvika namngivningskonflikter mellan bibliotek eller rubrikfiler.

Så om du använder modern kompilering er, då måste du importera namnområdet för att du kan använda det, eller om du inte vill importera alla konstruktioner men bara några av dem använder du std :: cin eller std :: cout.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *