c 헤더 파일 아래에 언제 use std::cout use 명령을 입력해야 합니까?
1. 키워드 철자가 잘못되어 사용이 아닌 사용 중입니다.
2. using에는 두 가지 용도가 있습니다. 하나는 네임스페이스 std를 사용하는 것과 같은 using 지시문이고, 다른 하나는 std::cout을 사용하는 것과 같은 using 문입니다.
3. using 문 다음에는 이름을 사용하기 전에 네임스페이스 접두사를 추가할 필요가 없습니다. 예를 들어 std::cout을 using으로 선언하지 않은 경우, cout을 직접 사용하면 정의되지 않은 식별자의 컴파일 오류가 발생할 수 있습니다. 왜냐하면 컴파일러는 std::cout과 cout이 서로 다른 이름이고 std::cout은 서로 다른 이름으로 간주하기 때문입니다. 따라서 cout을 직접 인용하도록 선언하지 않으면 "먼저 선언한 다음 인용"하는 규칙에 위배됩니다.
4. using 지시문의 기능은 네임스페이스에 선언된 모든 이름을 도입하는 것입니다. 이 효과는 using 네임스페이스 std와 같이 사용된 네임스페이스에 선언된 각 이름에 대해 using 문을 사용하는 것과 같습니다. 이 using 네임스페이스가 이전에 cout, cin, max 및 기타 이름, 해당 헤더 파일이 포함되어 있는 한(std::cout, std::cin, std::max 등과 같은 명령문 포함) 앞에 std::를 추가하지 않고도 직접 인용할 수 있습니다. .
4. 선언 및 명령어를 사용하여 도입된 이름 범위는 사용에서 시작되며 끝은 함수 내에서 사용 위치와 관련됩니다. 명령문 블록의 경우 명령문입니다. End, 전체적으로 컴파일 단위(소스 파일)의 끝입니다. 각 컴파일 단위를 컴파일할 때 헤더 파일이 개별적으로 포함된다는 점에 유의하세요. 소스 파일의 전역 범위에서 using을 사용하면 소스 파일 자체에만 영향을 미칩니다. 헤더 파일의 전역 범위에서 사용하면 이 헤더 파일을 포함하는 모든 소스 파일에 영향을 줍니다. 따라서 헤더 파일에 사용되는 사용(특히 지시어 사용)은 네임스페이스 오염을 일으킬 가능성이 높으며, 이로 인해 재정의 등 설명할 수 없는 오류가 발생할 수 있습니다.
5. 결론은 헤더 파일이 하나의 소스 파일에만 포함된다는 것이 보장되지 않는 한 헤더 파일의 전역 범위에서 using을 사용하지 않는 것입니다. 헤더 파일이 존재해야 합니다(소스 파일에 직접 코드를 작성하는 것이 더 편리합니다).
6. Using는 소스 파일에서 사용할 수 있지만 사용된 이름과 동일한 이름을 가진 엔터티를 선언하지 않는 것이 가장 좋습니다. 대신에 모호함이 발생합니다(네임스페이스 오염의 극단적인 경우). , std::와 같은 네임스페이스 접두사는 쓸모가 없으며 단순히 using을 사용하지 마세요. 예를 들어 /question/178309120.html은 네임스페이스 std를 사용한 다음 함수 템플릿 스왑을 정의하므로 템플릿 구문 분석 중에 컴파일 오류가 발생합니다. 이때, custom 전역 네임스페이스에서 swap을 지정하려면::swap을 사용해야 하고, 표준 라이브러리에서는 swap을 지정하려면 std::swap을 사용하지 않는 것만큼 편리하지 않습니다.
====
[원래 답변 그룹]