您好,登錄后才能下訂單哦!
這篇文章主要講解了“C++怎么將重載的運算符定義在操作對象的命名空間內(nèi)”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C++怎么將重載的運算符定義在操作對象的命名空間內(nèi)”吧!
C.168: 將重載的運算符定義在操作對象的命名空間內(nèi)
可讀性。提供使用ADL發(fā)現(xiàn)操作符的能力。避免不同命名空間中的不一致。
Example(示例)
struct S { };
bool operator==(S, S); // OK: in the same namespace as S, and even next to S
S s;
bool x = (s == s);
這正是默認相等比較運算符做的事情,如果存在這么一個默認的話。
Example(示例)
namespace N {
struct S { };
bool operator==(S, S); // OK: in the same namespace as S, and even next to S
}
N::S s;
bool x = (s == s); // finds N::operator==() by ADL
struct S { };
S s;
namespace N {
S::operator!(S a) { return true; }
S not_s = !s;
}
namespace M {
S::operator!(S a) { return false; }
S not_s = !s;
}
代碼中N和M兩個命名空間中!s的含義不一樣。這會非?;靵y。如果去掉命名空間M的定義又會增加出錯的可能。
Note(注意)
如果為不同命名空間內(nèi)的兩個不同的類型定義二目運算符,你無法遵守本準則。例如:
Vec::Vector operator*(const Vec::Vector&, const Mat::Matrix&);
這可能是最好狀態(tài)了。
See also(參照)
這可以說是【幫助函數(shù)應(yīng)該和它幫助的類定義在一個命名空間內(nèi)】規(guī)則的特例。
Enforcement(實施建議)
標記沒有和操作對象定義在同一個命名空間中的運算符。
感謝各位的閱讀,以上就是“C++怎么將重載的運算符定義在操作對象的命名空間內(nèi)”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對C++怎么將重載的運算符定義在操作對象的命名空間內(nèi)這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。