다음을 통해 공유


이름 및 정규화된 이름

이진 범위 결정 연산자(::)와 함께 사용되는 이름은 "정규화된 이름"이라고 합니다. 이진 범위 결정 연산자 뒤에 지정된 이름은 연산자의 왼쪽에 지정된 클래스의 멤버 또는 해당 기본 클래스의 멤버여야 합니다.

멤버 선택 연산자(. 또는 –>) 뒤에 지정된 이름은 연산자 왼쪽에 지정된 개체의 클래스 형식 멤버 또는 해당 기본 클래스의 멤버여야 합니다. –>의 왼쪽이 클래스 개체이고 클래스가 다른 클래스 형식에 대한 포인터로 확인되는 오버로드된 멤버 선택 연산자(–>)를 정의하는 경우 멤버 선택 연산자(–>) 오른쪽에 지정된 이름은 다른 클래스 형식의 개체일 수도 있습니다. 이에 대해서는 클래스 멤버 액세스에 자세히 설명되어 있습니다.

컴파일러는 다음과 같은 순서로 이름을 검색하고 해당 이름이 발견되면 중지합니다.

  1. 이름이 함수 내에서 사용되면 현재 블록 범위이고, 그렇지 않으면 전역 범위입니다.

  2. 가장 바깥쪽 함수 범위(함수 인수 포함)를 포함하여 각각의 바깥쪽 블록 범위를 통한 외부입니다.

  3. 이름이 멤버 함수 내에서 사용되는 경우 클래스의 범위에서 이름을 검색합니다.

  4. 클래스의 기본 클래스에서 이름을 검색합니다.

  5. 바깥쪽 중첩 클래스 범위(있는 경우) 및 해당 기본이 검색됩니다. 가장 바깥쪽의 바깥쪽 클래스 범위를 검색할 때까지 검색을 계속합니다.

  6. 전역 범위를 검색합니다.

하지만 이 검색 순서는 다음과 같이 수정할 수 있습니다.

  1. 앞에 ::이 있는 이름은 검색이 전역 범위에서 시작되도록 합니다.

  2. 앞에 class, struct 및 union 키워드가 나오는 이름은 컴파일러가 class, struct 또는 union 이름만 검색하도록 합니다.

  3. 범위 결정 연산자(::)의 왼쪽에 있는 이름은 class, struct, namespace 또는 union 이름일 수만 있습니다.

이름이 비정적 멤버를 참조하지만 정적 멤버 함수에 사용된 경우 오류 메시지가 생성됩니다. 마찬가지로 이름이 바깥쪽 클래스의 비정적 멤버를 참조하면 바깥쪽 클래스 this 포인터가 안쪽 클래스에 없으므로 오류 메시지가 생성됩니다.

참고 항목

참조

범위 규칙의 요약