최상의 답변
std는 네임 스페이스입니다. 네임 스페이스는 C ++ STD 90에 추가되었습니다. 이전 버전의 C ++에서는 네임 스페이스가 없었기 때문에 cout을 사용했고 최신 C ++에서는 std :: cout을 사용합니다.
완벽 함을 위해 맨 위에 using namespace std;
라고 선언 한 경우 cout
는 std::cout
을 의미합니다. .
하지만 이는 권장되는 방법이 아니며 정규화 된 std :: cout 이름을 사용하려면 피해야합니다.
TL; DR; 네임 스페이스는 대규모 프로젝트에서 이름 충돌을 방지합니다. std는 C ++ 표준 라이브러리의 네임 스페이스입니다.
설명 : 이름에서 알 수 있듯이 네임 스페이스는 고유 한 이름의 범위를 제한하는 데 사용되어 동일한 이름을 가진 두 개체가있을 가능성을 줄입니다. 모든 언어는 그것을 필요로하며 어떤 식 으로든 제공합니다. 예를 들어 자바는 그것을 패키지라고 부른다.
100 ~ 500 줄 정도의 작은 프로그램에서 모든 이름이 고유하거나 그와 비슷한 것을 확인하기 위해 * 언어 기능 *을 갖는 것은 과잉처럼 들린다. 그러나 이름 충돌은 더 테이블 아래에서 발생할 수 있습니다. 내가 XYZ라는 클래스가있는 라이브러리를 작성하고 다른 친구가 우연히 동일한 클래스 이름 XYZ를 갖는 다른 라이브러리를 작성했다면. (수업은 다른 목적으로 제공되거나 동일하게 제공 될 수 있지만 상관 없습니다.) 우리 끝에는 문제가 없습니다. 이제 소프트웨어를 개발하고 두 라이브러리를 모두 사용한다고 가정합니다. 이제 프로젝트에는 XYZ 클래스의 두 가지 정의가 있습니다. 그것은 단순히 빌드를 깨뜨릴 것이며, 아마도 두 클래스를 사용하지 않거나 필요하지 않더라도 동일한 이름으로 정의 되었기 때문에 두 라이브러리를 함께 사용하여 코드를 빌드하는 것은 불가능합니다.
네임 스페이스는이 문제를 해결합니다. 나와 당신의 친구는 우리 도서관에 대해 서로 다른 네임 스페이스를 갖게 될 것입니다. (네임 스페이스는 전역 적으로 고유해야하므로 라이브러리를 작성하는 일부 다른 개발자가 라이브러리에 대해 동일한 네임 스페이스를 선택하지 않도록 개발자 회사 이름 ID도 여러 번 포함해야합니다.)
고전 예는 Java의 List 클래스입니다. 2 개의 목록이 있습니다. 하나는 데이터 구조 목록에 대한 인터페이스입니다. 기타는 GUI 목록 구성 요소 목록입니다. 프로그램에서 둘 다 사용할 수 있으며이 경우 정규화 된 이름 (java.util.List
또는 java.awt.List
)으로 참조합니다. 패키지를 사용하면 동일한 이름을 사용할 수 있습니다. 그렇지 않으면 둘 다 추가하려고하면 컴파일러가 원하는 List를 알 수 없으며 모호성 (단일 명령문에서 2 개의 동일하게 공제 가능한 의미를 가짐) 때문에 오류를 발표합니다.
std는 C ++ 표준 라이브러리에 대해 선택된 이름입니다.
즉, 표준 라이브러리의 모든 것은 std 아래에 있으며 코드에서는 std :: cout, std :: string으로 참조됩니다. , std :: map 등.
또한 std 네임 스페이스에 어떤 것도 정의해서는 안되며 라이브러리를 작성할 때마다 별도의 네임 스페이스를 만들어야하므로 오염되지 않습니다. 표준 네임 스페이스입니다.
Answer
이전 컴파일러를 사용하는 경우 cin 이 제대로 작동합니다.
그러나 최신 C ++에서는 모든 표준 항목이 std 네임 스페이스로 래핑됩니다.
네임 스페이스는 이름 충돌을 방지하는 데 도움이됩니다. 라이브러리 또는 헤더 파일.
최신 컴파일을 사용하는 경우 어, 그런 다음 사용할 수있는 네임 스페이스를 가져와야합니다. 또는 모든 구성을 가져 오지 않고 일부만 가져 오려면 std :: cin 또는 std :: cout.