M21 利用過載技術避免隱式型別轉換

2021-09-08 14:20:34 字數 736 閱讀 8071

1、考慮upint 的加法+,upint a, b, result; 為了使result = a+10; result= 10+a; 都能通過編譯,操作符過載如下:

const upint operator+(const upint& lhs, const upint& rhs);

注意:不能使用成員操作符,否則result= 10+a;編譯錯誤,因為隱式型別轉換不能轉換為this指標。

2、在result = 10+a;呼叫的過程中,10會隱式轉換為upint(條件是upint單一形參構造方法不是explicit),這導致臨時物件的產生,效率降低。

3、怎麼解決這個問題呢?

增加過載方法,如下:

const upint operator+(const upint& lhs, const upint& rhs);

const upint operator+(const upint& lhs, int  rhs);

const upint operator+(int lhs, const upint& rhs);

4、注意,千萬不能寫出 const upint operator+(int lhs, int rhs) ,因為這將徹底改變int型別的加法意義,必將造成天下大亂。在c++,過載操作符的形參中至少要有乙個自定義型別。也就是說,對於內建型別,禁止使用者改變其操作符的含義。

5、過載技術避免了隱式型別轉換,不再產生臨時物件。但是增加了一系列過載的方法,這不見得是個好辦法。需要在兩種方式中進行取捨。

利用Fiddler或Charles進行mock資料

使用場景 伺服器資料不符合測試條件時,我們可以通過在本地建立虛擬資料來打到測試用例所描述的條件。fiddler使用方法 1 首先在本地建立txt資料 將抓到的response中的json資料拷貝到記事本,我們根據需要進行修改,然後點選儲存。文字儲存格式utf 8或asci 2 利用fiddler重定...

liunx 利用supervisor 崩潰重啟程序

以ubuntu為例子 第一步 安裝apt get install supervisor centos 用 yum install 第二步 配置程式路徑 etc init.d supervisor 配置路徑 etc supervisor supervisord.conf 擴充套件路徑 etc supe...

利用set實現去重

var arr 1,2,1,3,2,4,5,1,3 var setarr new set arr var newarr setarr.foreach function e console.log newarr set是es6裡新提出的乙個集合的概念,類似於陣列arr,同樣不只是數字型別,其他型別的資...