문제

특정 네임 스페이스에서 라이브러리를 작성할 때 해당 네임 스페이스의 클래스에 과부하 된 연산자를 제공하는 것이 종종 편리합니다. 오버로드 된 연산자는 라이브러리의 네임 스페이스에서 구현 될 수있는 것으로 보입니다 (적어도 G ++).

namespace Lib {
class A {
};

A operator+(const A&, const A&);
} // namespace Lib

또는 글로벌 네임 스페이스

namespace Lib {
class A {
};
} // namespace Lib

Lib::A operator+(const Lib::A&, const Lib::A&);

내 테스트에서 둘 다 잘 작동하는 것 같습니다. 이 두 옵션 사이에 실질적인 차이가 있습니까? 어느 쪽이든 접근이 더 좋습니까?

도움이 되었습니까?

해결책

라이브러리 네임 스페이스에서 정의해야합니다. 컴파일러는 어쨌든 인수 종속 조회를 통해 그들을 찾을 것입니다.

글로벌 네임 스페이스를 오염시킬 필요가 없습니다.

다른 팁

라이브러리 네임 스페이스에 넣는 것은 그로 인해 작동합니다 Koenig 조회.

구문은 장점이 적고 글로벌 네임 스페이스를 혼란스럽게하지 않기 때문에 네임 스페이스에서 정의해야합니다.

실제로 클래스 정의에서 과부하를 정의하면이 질문이됩니다.

namespace Lib {

class A {
public:
    A operator+(const A&);
};

} // namespace Lib
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top