2014-02-06 1 views
6

며칠 전 클래스 정의 친구 함수 (Which scope does an in-class-defined friend function belong to?)의 범위에 대한 질문을했고,이 함수가 둘러싸는 네임 스페이스의 범위에 있음을 알게되었지만 명시 적으로 선언 할 때까지 검색 할 수 없습니다. 수업 외 (ADL은 예외). 그리고 클래스가 로컬이 아닌 클래스 (경우에만 경우 함수는 클래스의 친구 선언에서 정의 할 수 있습니다클래스 정의 친구 기능의 범위는 무엇입니까?

:

오늘은 (섹션 11.3) C++ 표준에서 몇 가지 관련 문을 발견 9.8) 함수 이름은 정규화되지 않았고 함수의 이름 공간 범위가 있습니다. [예 :

class M { 
    friend void f() { } // definition of global f, a friend of M, 
         // not the definition of a member function 
}; 
—end example ] 

이러한 기능은 내재적 inline이다. 클래스에 정의 된 friend 함수는 정의 된 클래스의 (어휘) 범위에 있습니다. 클래스 외부에서 정의 된 friend 함수는 (3.4.1)이 아닙니다. 우리는이 범위 관련된 계산서가 여기에 있다는 것을 알 수

: "이 정의 된 클래스의 (어휘) 범위에" "네임 스페이스 범위가 있습니다." 나는 여기서 혼란스러워. 전자가 이전 질문 (Which scope does an in-class-defined friend function belong to?)과 관련이 있다면, 후자는 무엇을 의미합니까?

+0

AFAIK, 친구 기능 내에서 이름 검색에 관한 내용입니다. [라이브 예제] (http://coliru.stacked-crooked.com/a/046896a00ece8086) – dyp

답변

1

"네임 스페이스 범위 함수"는 네임 스페이스의 멤버 인 함수입니다 (즉, 여기서 "범위"는 함수의 "집 범위"를 의미합니다). 진행해야한다 클래스 부여 우정 인라인 정의 친구 기능 (11.3)의 정의에 사용되는 이름

이름 조회가 설명 된대로 말해야 3.4.1에

후자 문 링크, 멤버 함수 정의에서 검색합니다.

관련 문제