亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

C++ 中重載 + 操作符的正確方法

2019-11-17 05:05:25
字體:
來源:轉載
供稿:網友
用戶定義的類型,如:字符串,日期,復數,聯合體以及文件經常重載二元 + 操作符以實現對象的連接,附加或合并機制。但是要正確實現 + 操作符會給設計,實現和性能帶來一定的挑戰。本文將概要性地介紹如何選擇正確的策略來為用戶定義類型重載這個操作符。

考慮如下的表達式: 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/C++技術專題  C/C++進階技術文檔專題,或

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩av中文字幕在线播放| 国产一区二区视频在线观看| 91精品国产一区| 97在线观看视频国产| 国产一区二区日韩精品欧美精品| 中文字幕亚洲欧美日韩2019| 6080yy精品一区二区三区| 日韩hd视频在线观看| 国产精品高潮粉嫩av| 国产在线观看不卡| 国产91精品高潮白浆喷水| 国产精品久久一区主播| 国产午夜精品免费一区二区三区| 日韩久久免费电影| 日韩免费观看视频| 97精品视频在线观看| 日本sm极度另类视频| 欧美成人网在线| 国产精品久久久久久中文字| 亚洲色图第三页| 久久久久国色av免费观看性色| 九九九久久国产免费| 日韩有码在线视频| 国产在线观看精品一区二区三区| 久久久综合免费视频| 欧美日韩亚洲视频| 久久久久国色av免费观看性色| 欧美在线观看日本一区| 亚洲综合在线小说| 欧美极品第一页| 亚洲精品xxx| 日韩视频在线免费观看| 亚洲国产精品va在线观看黑人| 97精品国产aⅴ7777| 欧美日韩国产在线看| 国产性色av一区二区| 精品一区二区三区四区| 国产亚洲欧洲高清一区| 成人免费看吃奶视频网站| 91精品中文在线| 欧美午夜片在线免费观看| 欧美日韩一区二区三区在线免费观看| 久久亚洲春色中文字幕| 91爱爱小视频k| 91福利视频网| 精品欧美一区二区三区| 久久亚洲精品成人| 91精品国产色综合久久不卡98口| 日韩在线观看电影| 一区二区三区www| 91中文在线视频| 精品久久久久久久久久久久久久| 久久99国产综合精品女同| 日韩av最新在线| 久久久久久久久久亚洲| 欧美性色视频在线| 国产欧美欧洲在线观看| 午夜精品视频网站| 国产成人精品免费久久久久| 国产精品久久久久久中文字| 国产精自产拍久久久久久蜜| 国产欧美久久一区二区| 国产一区二区三区视频| 亚洲国产99精品国自产| 欧美日韩一区二区在线播放| 欧美激情乱人伦一区| 欧美精品在线免费播放| 深夜精品寂寞黄网站在线观看| 欧美黑人xxxⅹ高潮交| 日韩美女主播视频| 欧美国产日韩一区二区| 欧美一级电影久久| 欧美怡红院视频一区二区三区| 欧美亚洲国产成人精品| 日韩禁在线播放| 国产suv精品一区二区三区88区| 91久久久精品| 国产成人精品999| 激情久久av一区av二区av三区| 欧美专区在线观看| 91日本在线观看| 国产精品久久久久久亚洲影视| 中文字幕亚洲欧美日韩在线不卡| 亚洲国产精品99久久| 久久成人一区二区| 亚洲一区亚洲二区亚洲三区| 欧美精品videos另类日本| 国语自产精品视频在线看| 日韩人体视频一二区| 日韩中文字幕视频在线| 日本久久久久亚洲中字幕| 国产精品视频在线播放| 国产亚洲在线播放| 亚洲aaaaaa| 久久久久九九九九| 伊人久久大香线蕉av一区二区| 2021久久精品国产99国产精品| 欧美大片va欧美在线播放| 国产成人涩涩涩视频在线观看| 91久久久亚洲精品| 最近2019中文字幕第三页视频| 日韩成人黄色av| 欧美一级片一区| 久久夜色精品亚洲噜噜国产mv| 国产成人精品午夜| 深夜福利亚洲导航| 国产精品成人品| 成人精品视频99在线观看免费| 91国内在线视频| 亚洲高清免费观看高清完整版| 日韩欧美在线第一页| 欧美电影电视剧在线观看| 欧美日韩国产成人在线| 久久久国产视频91| 一个人看的www欧美| 亚洲伊人成综合成人网| 91精品国产乱码久久久久久久久| 欧美激情按摩在线| 成人在线视频网站| 日韩亚洲精品视频| 亚洲男女性事视频| 亚洲美女av网站| 欧美一级片久久久久久久| 日韩中文第一页| 欧美精品videos性欧美| 亚洲香蕉av在线一区二区三区| 国产精品一区二区三区久久| 欧美尺度大的性做爰视频| 日韩欧美国产激情| 亚洲一级黄色片| 九九九久久国产免费| 欧美一级淫片aaaaaaa视频| 欧美精品激情视频| 欧美激情中文字幕乱码免费| 亚洲国产女人aaa毛片在线| 久久精品国产2020观看福利| 国产精品青青在线观看爽香蕉| 久久露脸国产精品| 日韩中文字幕免费看| 国精产品一区一区三区有限在线| 精品亚洲一区二区三区四区五区| 91九色视频在线| 成人免费观看a| 91中文字幕在线观看| 97色在线播放视频| 91精品国产乱码久久久久久蜜臀| 久久成人国产精品| 91免费综合在线| 一区二区欧美日韩视频| 热久久美女精品天天吊色| 亚洲a中文字幕| 成人激情视频小说免费下载| 亚洲午夜久久久影院| 欧美日韩成人免费| 亚洲精品美女久久久久| 国产亚洲欧洲高清一区| 欧美理论电影在线观看| 久久久久久亚洲| 国产精品一区久久久| 亚洲男人7777| 国产亚洲精品久久久久久| 精品亚洲精品福利线在观看| 九九热在线精品视频| 91高清免费在线观看|