C 遞增運算子過載中為什麼是後置遞增接受乙個額外的的形參而不是前置遞增?

時間 2021-11-23 02:29:14

1樓:

我猜(僅僅是我猜):C++語言設計者可能認為,假設#是乙個一元運算子,那麼使用該運算子的最自然形式是「#運算數」而不是「運算數#」。例如,使用非運算子!

的形式是「!valid」而不是「valid!」,使用取反運算子-的形式是「-integer」而不是「integer-」,等等。

因此,C++語言設計者可能認為,與後置自增運算子相比,前置自增運算子更像是乙個一元運算子。因為,使用前置自增運算子的形式是「++variable」而不是「variable++」。於是規定,在過載前置自增運算子時(通常以成員函式形式過載)無需帶任何引數,就像在過載乙個真正的一元運算子那樣。

同時規定,在過載後置自增運算子時(通常以成員函式形式過載)需帶乙個僅僅起到標識作用的佔位引數,就像在過載乙個偽造的二元運算子那樣。

2樓:

// 此處為什麼是呼叫本身而不是呼叫返回引用的operator++標準規定了, 後置 ++ 會選擇 int 的過載, 前置 ++ 會選擇無引數的過載. 這句話解決了你問題的一部分.

另外乙個部分是, 過載看的是呼叫引數是什麼型別, 不看返回值是哪個型別.

intfunc

(int

);double

func

(int

);這兩個函式是不能共存的. 你也不能試圖通過doublea=

func(0

);來讓它呼叫第二個 func. 這不符合語法

3樓:Intimacy

接受int形參只是為了繞過語法的限制,並沒有什麼實質的作用。這是語法的限制,遵循就行了

實現的角度來說,後置遞增依賴於前值遞增的實現。

4樓:stay

因為前置++不返回臨時值,所以常規操作是只實現前置++,後置++呼叫前置++,這個pattern甚至都感覺可以提提案讓編譯器來做預設操作

C 過載運算子如何確定運算子位置?

可以表示兩種運算元 加法或正。a a b 這兩個 是不同的。Struct const operator Struct const value Struct const operator Struct const v1,Struct const v2 a 等同於 operator a a b 等同於 ...

過載賦值運算子和加號運算子中const 的作用是什麼?

王浩 一 函式形參為非const 非引用 Box operator Box abox 呼叫者box1為非const,實參box2為非const Boxoperator Boxabox Box operator Boxabox int main 呼叫者box1為非const,實參box2為const ...

為什麼過載小於運算子,在return語句裡返回大於?

因為priority queue在預設情況下會使用 準確地說是less 進行比較運算,且缺省會構造大根堆。例如,在我的環境中,priority queue的原型是 template Tp,typename Sequence vector Tp typename Compare less Sequen...