네임 스페이스 외부에 네임 스페이스 멤버를 정의하면 네임 스페이스의 이름 앞에 네임 스페이스의 이름이 접두어로 사용되며 정의는 실제로 네임 스페이스를 묶는 네임 스페이스에서 발생합니다. 멤버 네임 스페이스 내부에 중첩 된 네임 스페이스에서는 발생할 수 없습니다.
namespace A { void f(); }
void A::f() { } // prefix with "A::"
namespace B { }
void B::f() { } // invalid! not declared in B!
namespace C { void f(); }
namespace D { void C::f() { } } // invalid! D doesn't enclose C
namespace E {
void f();
namespace F {
void E::f() { } // invalid! F is nested inside E!
}
}
그것은 당신이 또한 당신이 클래스의 이름으로 이름을 접두사로, 자신의 클래스의 외부에서 함수를 정의 할 수 있습니다 클래스 멤버와 동일한 물건입니다. 그러나 클래스의 경우 네임 스페이스 멤버는 외부 네임 스페이스를 정의하기 전에 해당 네임 스페이스에서 먼저 선언해야합니다.
어느 쪽이 더 관용적입니까? – Philipp
@Philipp 필자는 인라인 함수를 직접 배치하고 다른 함수를 따로 정의합니다. 특히 헤더/구현 파일 분리가있는 경우. –
동어 반복이 아닌가요? 클래스 정의에 정의 된 함수는 항상 인라인입니다. 내가 의미하는 바는'A :: f' 또는'네임 스페이스 A {f} '를 사용하여 독립 함수를 정의할지 여부입니다. 적어도 Boost는 후자를 선호하는 것 같습니다. – Philipp