簡體   English   中英

C ++中的命名空間和運算符重載

[英]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&);

從我的測試來看,它們似乎都可以正常工作。 這兩種選擇之間有什么實際區別? 哪種方法更好?

您應該在庫名稱空間中定義它們。 無論如何,編譯器將通過依賴於參數的查找找到它們。

無需污染全局名稱空間。

由於進行Koenig查找,因此將其放入庫名稱空間是可行的

您應該在名稱空間中定義它,這是因為語法將不太冗長且不會使全局名稱空間混亂。

實際上,如果在類定義中定義重載,這將成為一個有爭議的問題:

namespace Lib {

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

} // namespace Lib

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM