C++
인수 종속 이름 조회
수색…
어떤 기능이 발견되는지
함수는 먼저 인수 유형 T
에 따라 다음 중 하나 이상을 포함하는 "연관된 클래스" 및 "연관된 네임 스페이스" 세트를 수집하여 발견됩니다. 먼저 클래스, 열거 및 클래스 템플릿 전문화 규칙에 대한 규칙을 보여줍니다.
-
T
가 중첩 클래스이고, 멤버 열거 형이며, 그 다음에 그 클래스를 둘러싼 클래스입니다. -
T
가 열거 형일 경우 (클래스 멤버 일 수도 있습니다!), 가장 안쪽의 네임 스페이스입니다. -
T
가 클래스 인 경우 (중첩 될 수도 있습니다!), 모든 기본 클래스와 클래스 자체. 모든 관련 클래스의 가장 안쪽에있는 네임 스페이스입니다. -
T
가ClassTemplate<TemplateArguments>
(클래스 이기도 합니다!) 인 경우 템플릿 인수가있는 경우 템플릿 유형 인수, 템플릿 템플릿 인수의 네임 스페이스 및 템플릿 템플릿 인수의 주변 클래스와 연결된 클래스 및 네임 스페이스입니다. 회원 템플릿
이제 builtin 유형에 대한 몇 가지 규칙이 있습니다.
- 경우
T
포인터이다U
또는 배열U
와 관련된 클래스와 네임 스페이스U
. 예 :void (*fptr)(A); f(fptr);
void(A)
와 관련된 네임 스페이스와 클래스를 포함합니다 (다음 규칙 참조). -
T
가 함수 유형이면 매개 변수 및 반환 유형과 관련된 클래스 및 네임 스페이스입니다. 예 :void(A)
것이라고는과 관련된 네임 스페이스와 클래스 포함A
. -
T
가 멤버에 대한 포인터 인 경우 멤버 유형과 관련된 클래스 및 네임 스페이스가 멤버 함수에 대한 포인터와 데이터 멤버에 대한 포인터 모두에 적용될 수 있습니다. 예 :BA::*p; void (A::*pf)(B); f(p); f(pf);
A
,B
,void(B)
와 관련된 네임 스페이스와 클래스를 포함합니다void(B)
위의 함수 유형에 대한 글 머리 기호 적용).
모든 관련 네임 스페이스 내의 모든 함수와 템플릿은 인수 종속적 인 조회에 의해 발견됩니다. 또한 연결된 클래스에서 선언 된 네임 스페이스 범위 friend 함수가 발견 되며 일반적으로 표시되지 않습니다. 그러나 지시문 사용은 무시됩니다.
다음 예제 호출은 모두 유효하며 f
의 네임 스페이스 이름을 f
로 한정하지 않습니다.
namespace A {
struct Z { };
namespace I { void g(Z); }
using namespace I;
struct X { struct Y { }; friend void f(Y) { } };
void f(X p) { }
void f(std::shared_ptr<X> p) { }
}
// example calls
f(A::X());
f(A::X::Y());
f(std::make_shared<A::X>());
g(A::Z()); // invalid: "using namespace I;" is ignored!
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow