참고 :이 질문은 name space
아닙니다 namespace
.
C ++ 표준에는에 대한 참조가 name space
있지만 이에 대한 정의는 없습니다. 표준에 따르면 레이블과 매크로는 다른 이름 공간에 있습니다. 다른 모든 참조 name space
는 다음과 같이 C / C ++ 호환성 섹션에 있습니다 ( 현재 초안 ).
이것은 C와 C ++ 사이의 몇 가지 비 호환성 중 하나이며, 이름을 단일 범위에서 유형으로 선언하고 유형이 아닌 이름으로 정의 할 수있는 새로운 C ++ 네임 스페이스 정의에 기인 할 수 있습니다. 유형 이름을 지정하고 키워드 class, struct, union 또는 enum을 사용하여 유형 이름을 참조해야합니다. 이 새로운 네임 스페이스 정의 는 C ++ 프로그래머에게 중요한 표기법 편의를 제공하고 사용자 정의 유형을 기본 유형의 사용과 최대한 유사하게 사용하도록 도와줍니다.
이 새로운 네임 스페이스 정의 는 무엇입니까 ? 표준에서 어디서 찾을 수 있습니까? 정확한 규칙은 무엇입니까? 규칙은 "비 유형 숨기기 유형"보다 더 복잡한 것 같습니다. 마찬가지로, 이것은 컴파일되지 않습니다 :
typedef int Foo; // Foo is a type
void Foo(); // not a type, but compile error, instead of hiding
그러나 이것은 :
struct Foo { }; // Foo is a type as well
void Foo(); // This hides the type Foo. "struct Foo" refers to the type
그리고 이것은 컴파일되지 않습니다 :
struct Foo { }; // Type
namespace Foo { } // Non-type, but compiler error instead of hiding
[stmt.label]/1
과 매크로에 대한 이름 공간이 두 개 이상 있습니다 [cpp]/8
.