![](/img/trans.png)
[英]Difference between prefix and postfix increment operators overloading implementations for iterators in 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.