It recently came to my attention 해당 구성원 함수 완전 그림자 클래스 내부에서 동일한 이름의 자유 함수입니다. 그리고 완전히 동일한 이름을 가진 모든 자유 함수가 과부하 해결을 위해 고려되지 않는다는 것을 완전히 의미합니다. 나는이 같은 somwthing 함께 할 왜 이해할 수 :클래스 멤버가 동일한 이름의 그림자없는 함수를 사용하는 이유는 무엇입니까?
기능이 동일한 서명이void f();
struct S
{
void f();
void g()
{
f(); // calls S::f instead of ::f
}
};
, 변수 범위 지정 등의 천연 같은 방식으로 작동합니다. 나는 클래스 내부에서 무료 기능을 그림자 호출하는 방법을 요구하고 있지 않다
void f();
struct S
{
void f(int x);
void g()
{
f(); // fails to compile attempting to call S::f, which has wrong signature
}
};
: 무료 기능이 같은 다른 서명이있는 경우 왜 UNAMBIGIOUS 통화를 금지하고 있습니다. 내가 알고 싶은 것은이 디자인의 근거입니다.
Bjarne Stroustrup에게 문의해야 할 수도 있습니다. – peacemaker
이렇게 검색하면 생성 된 후보 함수의 목록이 항상 작음을 의미합니다. 그것은 컴파일 시간에 유용합니다. 가능한 모든 후보 (ADL 포함)를 검색했는지 상상할 수 있습니다. 많은 템플릿이 있으면 매우 빨리 느려질 것입니다. 또한 대부분의 경우 사용법과 원하는 의미를 반영합니다. 보통'foo'라고 말할 때'foo'가 가장 가까운 것으로 생각합니다. 가장 가까운 것이 아닌 경우 실수를 저 지르려고합니다. 런타임에 이상한 일이 발생하는 것보다 오류가 낫습니다. 일을 지역적으로 유지하는 것은 좋은 행동입니다. – Flexo
이름 조회에서이 프레젠테이션을 즐길 수 있습니다. http://channel9.msdn.com/Series/C9-Lectures-Stephan-T-Lavavej-Core-C-/Stephan-T-Lavavej-Core-C-1-of -n – MFH