亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++怎么將重載的運算符定義在操作對象的命名空間內

發布時間:2021-11-26 15:38:56 來源:億速云 閱讀:174 作者:iii 欄目:大數據

這篇文章主要講解了“C++怎么將重載的運算符定義在操作對象的命名空間內”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C++怎么將重載的運算符定義在操作對象的命名空間內”吧!

C.168: 將重載的運算符定義在操作對象的命名空間內

Reason(原因)

可讀性。提供使用ADL發現操作符的能力。避免不同命名空間中的不一致。

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

Example, bad(反面示例)
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的含義不一樣。這會非常混亂。如果去掉命名空間M的定義又會增加出錯的可能。

Note(注意)

如果為不同命名空間內的兩個不同的類型定義二目運算符,你無法遵守本準則。例如:

Vec::Vector operator*(const Vec::Vector&, const Mat::Matrix&);

這可能是最好狀態了。

See also(參照)

這可以說是【幫助函數應該和它幫助的類定義在一個命名空間內】規則的特例。

Enforcement(實施建議)

  • 標記沒有和操作對象定義在同一個命名空間中的運算符。

感謝各位的閱讀,以上就是“C++怎么將重載的運算符定義在操作對象的命名空間內”的內容了,經過本文的學習后,相信大家對C++怎么將重載的運算符定義在操作對象的命名空間內這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

建宁县| 什邡市| 抚州市| 海丰县| 融水| 河津市| 中牟县| 抚顺县| 古蔺县| 高要市| 永年县| 东兴市| 中西区| 仙游县| 隆昌县| 龙井市| 囊谦县| 南澳县| 金堂县| 平顶山市| 华宁县| 正镶白旗| 四会市| 大足县| 宣武区| 云林县| 邢台县| 浦江县| 阿拉善左旗| 辽阳市| 称多县| 富民县| 宜黄县| 三河市| 镇远县| 蓬溪县| 渝北区| 葵青区| 锦州市| 新宁县| 玛曲县|