Namespaces
Variants

Name lookup

From cppreference.net
C++ language
General topics
Flow control
Conditional execution statements
Iteration statements (loops)
Jump statements
Functions
Function declaration
Lambda function expression
inline specifier
Dynamic exception specifications ( until C++17* )
noexcept specifier (C++11)
Exceptions
Namespaces
Types
Specifiers
constexpr (C++11)
consteval (C++20)
constinit (C++20)
Storage duration specifiers
Initialization
Expressions
Alternative representations
Literals
Boolean - Integer - Floating-point
Character - String - nullptr (C++11)
User-defined (C++11)
Utilities
Attributes (C++11)
Types
typedef declaration
Type alias declaration (C++11)
Casts
Memory allocation
Classes
Class-specific function properties
Special member functions
Templates
Miscellaneous

이름 검색(name lookup)은 프로그램에서 이름 이 나타났을 때, 이를 도입한 선언 과 연결하는 절차입니다.

예를 들어, std:: cout << std:: endl ; 를 컴파일하기 위해, 컴파일러는 다음을 수행합니다:

  • 이름 std 에 대한 비한정 이름 탐색(unqualified name lookup)으로, 헤더 <iostream> 에서 네임스페이스 std의 선언을 찾음
  • 이름 cout 에 대한 한정 이름 탐색(qualified name lookup)으로, 네임스페이스 std 에서 변수 선언을 찾음
  • 이름 endl 에 대한 한정 이름 탐색(qualified name lookup)으로, 네임스페이스 std 에서 함수 템플릿 선언을 찾음
  • 이름 operator<< 에 대한 인수 의존 탐색(argument-dependent lookup) 으로 네임스페이스 std 에서 여러 함수 템플릿 선언을 찾고, 이름 std :: ostream :: operator << 에 대한 한정 이름 탐색(qualified name lookup)으로 클래스 std::ostream 에서 여러 멤버 함수 선언을 찾음.

함수 및 함수 템플릿 이름에 대해, 이름 검색은 동일한 이름에 여러 선언을 연관시킬 수 있으며, 인수 의존 검색 에서 추가 선언을 얻을 수 있습니다. 템플릿 인수 추론 이 적용될 수도 있으며, 선언 집합은 오버로드 해결 에 전달되어 사용될 선언을 선택합니다. 해당되는 경우 멤버 접근 규칙은 이름 검색 및 오버로드 해결 이후에만 고려됩니다.

다른 모든 이름(변수, 네임스페이스, 클래스 등)에 대해, 이름 검색은 동일한 엔티티 를 선언하는 경우에만 여러 선언을 연관시킬 수 있으며, 그렇지 않으면 프로그램이 컴파일되기 위해 단일 선언을 생성해야 합니다. 범위 내에서 이름에 대한 검색은 "struct hack" 또는 "타입/비타입 숨김"으로 알려진 한 가지 예외를 제외하고 해당 이름의 모든 선언을 찾습니다: 동일한 범위 내에서, 이름의 일부 발생은 typedef 가 아닌 클래스/구조체/공용체/열거형의 선언을 참조할 수 있는 반면, 동일한 이름의 다른 모든 발생은 모두 동일한 변수, 비정적 데이터 멤버 또는 열거자를 참조하거나, 모두 오버로드된 함수 또는 함수 템플릿 이름을 참조합니다. 이 경우 오류는 발생하지 않지만, 타입 이름은 검색에서 숨겨집니다(코드는 정교화된 타입 지정자 를 사용하여 접근해야 합니다).

조회 유형

이름이 범위 지정 연산자 :: 바로 오른쪽에 나타나거나 :: 뒤에 모호성 제거 키워드 template 가 올 수 있는 경우에는 다음을 참조하십시오

그렇지 않으면, 다음을 참조하십시오

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
CWG 2063 C++98 "struct hack"이 클래스 범위에서 적용되지 않음 (C 호환성 손상) 적용됨
CWG 2218 C++98 비함수 (템플릿) 이름에 대한 조회가 동일한 개체를 선언하더라도
여러 선언을 연관시킬 수 없었음
허용됨

참고 항목

C documentation for Lookup and name spaces