Jaka jest różnica między cin i std:: cin?


Najlepsza odpowiedź

std to przestrzeń nazw. Przestrzenie nazw zostały dodane do C ++ STD 90. W starszych wersjach C ++, ponieważ nie było przestrzeni nazw, używałeś cout, a we współczesnym C ++ będziesz używał std :: cout.

Tak dla kompletności, mam wspomnieć, że jeśli na górze zadeklarowałeś, że jesteś using namespace std;, to cout będzie oznaczać std::cout .

Ale to nie jest zalecany sposób i należy go unikać na rzecz w pełni kwalifikowanej nazwy std :: cout.

TL; DR; Przestrzenie nazw zapobiegają konfliktom nazw w dużych projektach. std to przestrzeń nazw standardowych bibliotek C ++.

Wyjaśnienie: Dokładnie tak, jak sugeruje nazwa, przestrzenie nazw są używane do ograniczania zakresu unikalnych nazw, zmniejszając możliwość posiadania dwóch jednostek o tej samej nazwie. Każdy język tego potrzebuje i zapewnia to w taki czy inny sposób. Na przykład Java nazywa go pakietem.

W małym programie, powiedzmy 100–500 linii, wydaje się przesadą posiadanie * funkcji języka *, która zapewnia, że ​​wszystkie nazwy są unikalne lub coś w tym rodzaju. Ale zderzenie nazw może się zdarzyć na bardziej niejawny sposób. Gdybym napisał bibliotekę, która ma klasę o nazwie XYZ, a twój inny przyjaciel napisał inną bibliotekę, która, nawiasem mówiąc, ma tę samą nazwę klasy XYZ. (Zajęcia mogą służyć do innych celów lub do tego samego, ale to nie ma znaczenia). Nie będziemy mieć żadnych problemów. Teraz przypuśćmy, że tworzysz oprogramowanie i używasz OBU bibliotek. Twój projekt ma dwie definicje klasy XYZ. To po prostu zepsuje kompilację, a nawet jeśli prawdopodobnie nie używasz / nie potrzebujesz żadnej z dwóch klas, tylko dlatego, że są zdefiniowane z tą samą nazwą, niemożliwe będzie zbudowanie żadnego kodu z tymi dwiema bibliotekami razem.

Przestrzenie nazw rozwiązują ten problem. Ja i twój przyjaciel będziemy mieli różne przestrzenie nazw dla naszych bibliotek. (Przestrzenie nazw muszą być unikalne w skali globalnej i dlatego często zawierają również tożsamość nazwy firmy programisty, aby inni programiści piszący bibliotekę nie wybierali tej samej przestrzeni nazw dla swojej biblioteki)

Klasyczny przykładem jest klasa List w Javie. Istnieją 2 listy. Jednym z nich jest interfejs dla listy struktury danych. Innym jest lista składników listy GUI. Możesz użyć obu z nich w programie, aw takim przypadku skierujesz do nich w pełni kwalifikowane nazwy (java.util.List lub java.awt.List). Pakiety pozwalają na używanie tych samych nazw, w przeciwnym razie, jeśli spróbujemy dodać oba, kompilator nigdy nie dowie się, którą Listę chcesz i ogłosi błąd z powodu Niejednoznaczności (mając 2 równie możliwe do odliczenia znaczenia pojedynczej instrukcji).

std to nazwa wybrana dla biblioteki standardowej C ++.

Oznacza to, że wszystko w standardowych bibliotekach zostanie znalezione pod std, aw kodzie będzie nazywane std :: cout, std :: string , std :: map i tak dalej.

Oznacza to również, że NIE powinieneś definiować niczego w przestrzeni nazw std i powinieneś tworzyć oddzielną przestrzeń nazw za każdym razem, gdy piszesz bibliotekę, aby nie zanieczyszczać std namespace.

Odpowiedź

Jeśli używasz starego kompilatora, po prostu cin będzie działać dobrze.

Ale w nowoczesnym C ++ wszystkie standardowe rzeczy są umieszczone w przestrzeni nazw std .

Przestrzenie nazw pomagają uniknąć konfliktów nazw między biblioteki lub pliki nagłówkowe.

Więc jeśli używasz nowoczesnej kompilacji er, to musisz zaimportować przestrzeń nazw, aby móc jej używać, lub jeśli nie chcesz importować wszystkich konstrukcji, ale tylko niektóre z nich, użyj std :: cin lub std :: cout.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *