Wat is het verschil tussen cin en std:: cin?


Beste antwoord

std is een naamruimte. Naamruimten zijn toegevoegd aan C ++ STD 90. In oudere versies van C ++, aangezien er geen naamruimte was, gebruikte je cout en in modern C ++ gebruik je std :: cout.

Voor de volledigheid heb ik om te vermelden dat als je bovenaan hebt verklaard dat je using namespace std; bent, cout betekent std::cout .

Maar dat is niet een aanbevolen manier, en moet worden vermeden ten gunste van een volledig gekwalificeerde std :: cout-naam.

TL; DR; Naamruimten voorkomen naamconflicten in grote projecten. std is de naamruimte van de standaardbibliotheken van C ++.

Uitleg: Precies zoals de naam suggereert, worden naamruimten gebruikt om het bereik van unieke namen te beperken, waardoor de mogelijkheid van twee entiteiten met dezelfde naam wordt verkleind. Elke taal heeft het nodig en voorziet het op de een of andere manier. Java noemt het bijvoorbeeld package.

In een klein programma, zeg 100-500 regels, klinkt het als een overdrijving om een ​​* taalfunctie * te hebben om ervoor te zorgen dat alle namen uniek zijn of iets dergelijks. Maar naamclash kan op meer onder de tafel manieren plaatsvinden. Als ik een bibliotheek heb geschreven met een klasse met de naam XYZ, en je andere vriend schreef een andere bibliotheek die toevallig dezelfde klassenaam XYZ heeft. (De lessen kunnen voor verschillende doeleinden of hetzelfde dienen, maar dat maakt niet uit.) We zullen aan onze uiteinden geen enkel probleem hebben. Stel nu dat u software ontwikkelt en BEIDE bibliotheken gebruikt. Nu heeft uw project twee definities van klasse XYZ. Dat zal de build gewoon breken, en zelfs als je waarschijnlijk geen van de twee klassen gebruikt / nodig hebt, alleen omdat ze zijn gedefinieerd met dezelfde naam, zal het onmogelijk zijn om een ​​code te bouwen met die twee bibliotheken samen.

Naamruimten lossen dit probleem op. Ik en je vriend hebben verschillende naamruimten voor onze bibliotheken. (Naamruimten moeten wereldwijd uniek zijn en daarom vaak ook de identiteit van de naam van het ontwikkelaarbedrijf bevatten, zodat sommige andere ontwikkelaars die een bibliotheek schrijven, niet dezelfde naamruimte voor hun bibliotheek kiezen)

Een klassiek voorbeeld is List-klasse in Java. Er zijn 2 lijsten. Een daarvan is een interface voor de datastructuurlijst. Een andere is de componentenlijst van de GUI-lijst. U kunt ze allebei in een programma gebruiken, en in dat geval zult u ze met volledig gekwalificeerde namen verwijzen (java.util.List of java.awt.List). Met de pakketten kun je dezelfde namen gebruiken, anders zal de compiler, als we beide proberen toe te voegen, nooit te weten komen welke lijst je wilt, en zal hij een fout melden vanwege dubbelzinnigheid (met 2 even aftrekbare betekenissen van een enkele instructie).

std is de naam die is gekozen voor C ++ Standard Library.

Het betekent dat alles in standaardbibliotheken onder std zal worden gevonden en in code zal worden verwezen als std :: cout, std :: string , std :: map enzovoort.

Het betekent ook dat je GEEN ENKEL in de std naamruimte moet definiëren, en een aparte naamruimte moet aanmaken wanneer je een bibliotheek schrijft, zodat je niet vervuilt std namespace.

Answer

Als je een oude compiler gebruikt, dan zal cin gewoon goed werken.

Maar met moderne C ++ zijn alle standaard dingen verpakt in de std naamruimte.

Naamruimten helpen om naamgevingsconflicten tussen bibliotheken of header-bestanden.

Dus als u moderne compil eh, dan moet je de naamruimte bre importeren, want je kunt het gebruiken, of als je niet alle constructies wilt importeren, maar slechts enkele ervan, gebruik dan std :: cin of std :: cout.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *