日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ 中重载 + 操作符的正确方法

發布時間:2025/3/15 c/c++ 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ 中重载 + 操作符的正确方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  用戶定義的類型,如:字符串,日期,復數,聯合體以及文件常常重載二元 + 操作符以實現對象的連接,附加或合并機制。但是要正確實現 + 操作符會給設計,實現和性能帶來一定的挑戰。本文將概要性地介紹如何選擇正確的策略來為用戶定義類型重載這個操作符。
考慮如下的表達式: int x=4+2;

  內建的 + 操作符有兩個類型相同的操作數,相加并返回右值 6,然后被賦值給 x。我們可以斷定內建的 + 是一個二元的,對稱的,可交換的操作符。它產生的結果的類型與其操作數類型相同。按照這個規測,當你為某個用戶定義類型重載操作符時,也應該遵循相應內建操作符的特征。

  為用戶定義類型重載 + 操作符是很常見的編程任務。盡管 C++ 提供了幾種實現方法,但是它們容易使人產生設計上的誤解,這種誤解常常影響代碼的正確性,性能以及與標準庫組件之間的兼容性。
  下面我們就來分析內建操作符的特征并嘗試模仿其相應的重載機制。

  第一步:在成員函數和非成員函數之間選擇

  你可以用類成員函數的方式實現二元操作符如:+、- 以及 ==,例如:

class String
{
public:
bool operator==(const String & s); // 比較 *this 和 s
};?

  這個方法是有問題的。相對于其內建的操作符來說,重載的操作符在這里不具有對稱性;它的兩個參數一個類型為:const String * const(這個參數是隱含的),另一個類型為:const String &。因此,一些 STL 算法和容器將無法正確處理這樣的對象。

  另外一個可選方法是把重載操作符 + 定義為一個外部(extern)函數,該函數帶兩個類型相同的參數:

String operator + (const String & s1, const String s2);

  這樣一來,類 String 必須將該重載操作符聲明為友元:

class String
{
public:
friend String operator+(const String& s1,const String&s2);
};

  第二步:返回值的兩難選擇

  如前所述,內建操作符 + 返回右值,其類型與操作數相同。但是在調用者堆棧里返回一個對象效率很低,處理大型對象時尤其如此。那么能不能返回一個指針或引用呢?答案是不行。因為返回指針破壞參數類型與返回值類型應該相同的規則。更糟的是,鏈接多個表達式將成為不可能:

String s1,s2,s3;
String res;
res=s1+s2+s3; // 不可能用 String* 作為返回值

  雖然有一個辦法可以定義額外的 + 操作符重載版本,但這個辦法是我們不希望用的,因為返回的指針必須指向動態分配的對象。這樣的話,如果調用者釋放(delete)返回的指針失敗,那么將導致內存泄漏。顯然,返回 String* 不是一個好主意。

  那么返回 String& 好不好呢?返回的引用必須一定要是一個有效的 String。它避免了使用動態對象分配,該方法返回的是一個本地靜態對象的引用。靜態對象確實解決了內存泄漏問題,但這個方法的可行性仍然值得懷疑。在一個多線程應用中,兩個線程可能會并發調用 + 操作符,因此造成 String 對象的混亂。而且,因為靜態對象總是保留其調用前的狀態,所以有必要針對每次 + 操作符的調用都清除該靜態 String 對象。由此看來,在堆棧上返回結果仍然是最安全和最簡單的解決方案。

總結

以上是生活随笔為你收集整理的C++ 中重载 + 操作符的正确方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 超碰超碰| 欧美色图亚洲视频 | 韩国一区在线 | 五月婷婷,六月丁香 | 人人人草| 香蕉视频在线免费看 | 欧美激情在线一区二区 | 超碰97干 | 亚洲九九色 | 在线免费播放av | 国产精品s色 | 蜜臀av色欲a片无码精品一区 | 免费黄色网址大全 | 麻豆亚洲一区 | avtt亚洲天堂 | 一级中国毛片 | 伊人66 | 国产麻豆一区二区三区在线观看 | 伊人91视频 | 操极品女神 | 欧美韩日国产 | 在线免费看黄色片 | 美女脱裤子让男人捅 | 国产自偷自拍视频 | 欧美日韩黄色 | 欧美性视频一区二区三区 | 国产精品视频在线播放 | 你懂的在线观看网址 | 亚洲综合自拍偷拍 | 国内自拍视频网站 | 免费一级片视频 | 少妇高潮惨叫久久久久久 | 欧美精品一二三区 | 中文字幕一区二区三区免费看 | 欧美精品片| 超碰在线看 | 欧美韩国日本在线 | 色多多视频在线观看 | 狂野欧美性猛交xxxx777 | 黄瓜视频在线观看污 | 国产精成人品免费观看 | 国内精品999 | 久久国产精品综合 | 日本男女激情视频 | 第四色成人网 | 日日操夜夜爽 | 凹凸视频一区二区 | 超碰在97 | 情侣自拍av | 久久精品第一页 | 在线观看免费黄网站 | a级片中文字幕 | 少妇姐姐| 宅男午夜影院 | 成年人免费在线观看视频网站 | 波多野结衣人妻 | 老色鬼在线 | 欧美精品一区二区三区四区 | 亚洲国产免费av | 国模大胆一区二区三区 | 欧美久久99| 亚洲AV无码精品久久一区二区 | 国产女主播一区 | 欧美日韩一区二区精品 | 国产精品一级无码 | 视频区小说区 | 国产69熟| 国产又粗又猛又爽又黄91精品 | 一区二区三区视频网 | 888奇米影视 | 有码av在线 | 日本一区二区视频在线 | 狠狠操导航 | 亚洲免费观看 | 日韩久草 | www.brazzers.com| 日本午夜精品理论片a级app发布 | 黄色片一区二区三区 | 黄色av免费播放 | 碰碰久久| 国产福利资源 | 日本人做受免费视频 | 国产又爽又黄的激情精品视频 | 九九夜| 脱裤吧导航 | 欧美91精品| 欧美一区二区免费 | 99久久综合网 | 日本黄色高清视频 | 久久国产精品免费观看 | 女人黄色片 | 国产黄a三级三级三级看三级男男 | 神马午夜视频 | 好吊色综合 | 日韩久久成人 | 成人午夜影院在线观看 | 一区二区免费在线观看视频 | 欧美日韩高清不卡 | 国产在线视频卡一卡二 |