[英]Namespaces and Operator Overloading in C++
在特定名稱空間中編寫庫時,為該名稱空間中的類提供重載的運算符通常很方便。 似乎(至少在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&);
從我的測試來看,它們似乎都可以正常工作。 這兩種選擇之間有什么實際區別? 哪種方法更好?
您應該在庫名稱空間中定義它們。 無論如何,編譯器將通過依賴於參數的查找找到它們。
無需污染全局名稱空間。
您應該在名稱空間中定義它,這是因為語法將不太冗長且不會使全局名稱空間混亂。
實際上,如果在類定義中定義重載,這將成為一個有爭議的問題:
namespace Lib {
class A {
public:
A operator+(const A&);
};
} // namespace Lib
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.