簡體   English   中英

前綴和后綴運算符c ++

[英]prefix and postfix operators c++

class compl{
    float re,im;

public:
    compl(float r, float i)
        {re=r; im=i;}
    compl& operator++()
        {++re; return*this;} //(1)
    compl operator++(int k){
        compl z=*this; re++; im+=k; return z;} //(2)
    friend compl& operator--(compl& z)
        {--z.re; return z;}
    friend compl operator--(compl& z,int k)
        {compl x=z; z.re--; z.im-=k; return x;}
};

(1)為什么我們必須通過引用返回當前對象? 據我所知,引用只是某個東西的第二個名稱。

(2)為什么我們必須在z中保存當前對象,然后更改對象並返回未更改的z? 這樣做,我們將返回未增加的值。 是因為后綴運算符的工作方式(它返回舊的值,然后增加它)

(1)你不必,但它是慣用的,因為它允許鏈接操作員或電話。

(2)是的,后綴應該返回先前的值。

1- Operator ++重載必須通過引用返回,但如果您不需要變量的別名,則可以添加一個名為next的函數或具有相同結構的類似函數。

2-是,因為您需要返回當前值然后遞增變量。

(1)因為我們希望++也返回一個值,就像在

a = b++;

它的成本低於返回副本的成本。

(2)是的,這是后綴運算符的工作方式。 這解釋了為什么通常建議使用前綴增量來編寫帶迭代器的循環

for(iterator it = ..... ; it != .... , ++it) { ...}

而不是后綴增量:它避免構建臨時副本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM