Jaký je rozdíl mezi cin a std:: cin?


Nejlepší odpověď

std je jmenný prostor. Do C ++ STD 90 byly přidány jmenné prostory. Ve starších verzích C ++, protože neexistoval žádný jmenný prostor, jste použili cout a v moderním C ++ použijete std :: cout.

Jen pro úplnost mám zmínit, že pokud jste nahoře deklarovali, že jste using namespace std;, pak cout bude znamenat std::cout .

To ale není doporučený způsob a je třeba se mu vyhnout ve prospěch plně kvalifikovaného názvu std :: cout.

TL; DR; Obory názvů zabraňují konfliktům názvů ve velkých projektech. std je obor názvů standardních knihoven jazyka C ++.

Vysvětlení: Přesně, jak název napovídá, se obory názvů používají k omezení rozsahu jedinečných názvů, což snižuje možnost mít dvě entity se stejným názvem. Každý jazyk to potřebuje a nějakým způsobem to poskytuje. Java tomu říká například balíček.

V malém programu, řekněme 100–500 řádků, to zní jako přehnané mít * jazykovou funkci *, aby se ujistil, že všechna jména jsou jedinečná nebo něco podobného. Ke střetu jmen však může dojít více způsoby, než jsou v tabulce. Pokud jsem napsal knihovnu, která má třídu s názvem XYZ, a váš další přítel napsal jinou knihovnu, která má mimochodem stejný název třídy XYZ. (Třídy mohou sloužit k různým účelům nebo ke stejným účelům, ale to nevadí.) Na našich koncích nebudeme mít žádný problém. Nyní předpokládejme, že vyvíjíte software a používáte OBOU knihovny. Nyní má váš projekt dvě definice třídy XYZ. To jednoduše rozbije sestavení, ai když pravděpodobně nepoužíváte / nepotřebujete žádnou ze dvou tříd, jen proto, že jsou definovány se stejným názvem, bude nemožné vytvořit jakýkoli kód s těmito dvěma knihovnami společně.

Jmenné prostory tento problém řeší. Já a váš přítel budeme mít pro naše knihovny různé jmenné prostory. (Obory názvů musí být globálně jedinečné, a proto mnohokrát zahrnují také identitu názvu vývojářské společnosti, aby někteří další vývojáři, kteří píší knihovnu, nevybírali pro svoji knihovnu stejný prostor jmen)

Klasický příkladem je třída List v Javě. K dispozici jsou 2 seznamy. Jedním z nich je rozhraní pro datovou strukturu List. Další je seznam komponent GUI List. Oba je můžete použít v programu a v takovém případě je budete označovat plně kvalifikovanými názvy (java.util.List nebo java.awt.List). Balíčky vám umožňují používat stejná jména, jinak pokud se pokusíme přidat obě, kompilátor nikdy nezjistí, který seznam chcete, a ohlásí chybu kvůli nejednoznačnosti (má 2 stejně odečitatelné významy jednoho příkazu).

std je název zvolený pro standardní knihovnu C ++.

Znamená to, že vše ve standardních knihovnách najdete pod std a v kódu se bude označovat jako std :: cout, std :: string , std :: map atd.

Znamená to také, že byste v prostoru jmen neměli nic definovat a měli byste vytvořit samostatný prostor jmen, kdykoli píšete knihovnu, abyste neznečišťovali std namespace.

Odpověď

Pokud používáte starý kompilátor, jednoduše cin bude fungovat dobře.

Ale s moderním C ++ jsou všechny standardní položky zabaleny do std oboru názvů.

Jmenné prostory pomáhají vyhnout se konfliktům mezi názvy knihovny nebo hlavičkové soubory.

Takže pokud používáte moderní kompilátor eh, pak musíte importovat jmenný prostor brefor, můžete jej použít, nebo pokud chcete neimportovat všechny konstrukce, ale pouze některé z nich, použijte std :: cin nebo std :: cout.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *