Khi tạo thư viện trong một không gian tên cụ thể, thường thuận tiện để cung cấp các toán tử quá tải cho các lớp trong không gian tên đó. Dường như (ít nhất là với g ++) mà các nhà khai thác quá tải có thể được thực hiện hoặc trong không gian tên của thư viện:Không gian tên và nhà khai thác quá tải trong C++
namespace Lib {
class A {
};
A operator+(const A&, const A&);
} // namespace Lib
hoặc không gian tên toàn cầu
namespace Lib {
class A {
};
} // namespace Lib
Lib::A operator+(const Lib::A&, const Lib::A&);
Từ thử nghiệm của tôi, cả hai đều có vẻ làm việc tốt. Có sự khác biệt thực tế nào giữa hai lựa chọn này không? Là một trong hai cách tiếp cận tốt hơn?
Một lý do khác để sử dụng không gian tên thư viện: [bài đăng này] (http://stackoverflow.com/questions/5195512/namespaces-and-operator-resolution) chứa ví dụ về việc sử dụng không gian tên chung không hoạt động. – Tim