Name lookup
| 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 | ||||||||||||||||
|
||||||||||||||||
| 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
가 올 수 있는 경우에는 다음을 참조하십시오
그렇지 않으면, 다음을 참조하십시오
-
- (함수 이름의 경우, Argument-dependent lookup 을 포함합니다)
결함 보고서
다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| CWG 2063 | C++98 | "struct hack"이 클래스 범위에서 적용되지 않음 (C 호환성 손상) | 적용됨 |
| CWG 2218 | C++98 |
비함수 (템플릿) 이름에 대한 조회가 동일한 개체를 선언하더라도
여러 선언을 연관시킬 수 없었음 |
허용됨 |
참고 항목
- 범위(Scope)
- 인수 종속 이름 탐색 (ADL)
- 템플릿 인수 추론
- 오버로드 해결
|
C documentation
for
Lookup and name spaces
|