2016-07-12 6 views
1

일반적으로 클래스 본문에 멤버 함수를 직접 정의하면 암시 적으로 inline이됩니다. 그러나 이것에 대해 무엇을 :클래스 본문에 정의 된 인라인 친구 함수

class Foo { 
public: 
    friend void swap(Foo& a, Foo& b) { ... } 

    ... 
}; 

swap 암시 inline 또는 아닌가?

+0

인라인이어야한다고 생각합니다. 비 인라인 기능은 헤더 안에 들어갈 수 없습니다. 클래스 본문은 헤더 안에 삽입 할 수 있어야합니다. Ergo, 클래스 정의 바디 내에 제공된 모든 기능은 inlinable 기능이어야합니다. – PSkocik

+0

심지어 허용됩니까? 클래스 본문 내에 정의 된 친구 함수를 갖는 것은 무엇을 의미합니까? 그것은 멤버가되기보다는 둘러싼 네임 스페이스로 들어가는가? – jtbandes

+0

@jtbandes 예. 이 클래스는 클래스가있는 것과 동일한 네임 스페이스에있는 함수를 정의합니다. –

답변

5

예. 표준에서 [class.friend/6-7] 참조 :

클래스가 비 로컬 클래스 (9.8) 인 경우에만 함수를 클래스의 friend 선언에 정의 할 수 있습니다. name은 규정되지 않았고 함수는 네임 스페이스 범위를가집니다.

이러한 함수는 암시 적으로 inline입니다.