STL中 運算子的實現與分析

2021-10-06 17:16:06 字數 662 閱讀 1224

在stl中,任何迭代器都必須實現increment和dereference功能,對於前者,常常用到前置式和後置式兩種。它們的實現有所不同,也帶來了效率上的不同。先來看乙個實現範例:

#include

using

namespace std;

class

int;

int&

operator++(

)const int operator++(

int)

int&

operator--(

)const int operator--(

int)

int&

operator*(

)const

private

:int m_i;

};

可以看到,後置的形式存在乙個int型別引數,因為這是為了編譯器能夠區分前置和後置操作,當函式被呼叫時,編譯器會傳遞乙個0做為int引數的值給該函式。另外,從實現不難看到,前置的效率是要高於後置的,因為後置在實現的過程中需要構造臨時物件並返回。還有一點值得主要的是它們的返回引數是不同的,前置是對自身操作,然後將自身返回。而後置返回的已經不是之前的物件。這帶來的區別就是,前置可以對於返回的物件繼續進行操作,而後置的如果繼續進行操作,改變的是臨時物件的狀態,沒有意義。

NOT運算子與 運算子

6.4.2 not運算子與 運算子 對於簡單的條件查詢,not運算子與 運算子的功能幾乎沒有什麼區別,那麼not運算子的優勢體現在 呢?答案是它可以與其他運算子組合使用,這一點是 運算子所不能實現的。在6.4.1節已經介紹了not運算子與in運算子組合使用的例子,下面給出乙個not運算子與betwe...

過載運算子與STL總結

運算子過載 1.用成員函式過載運算子 class x 例如 過載 使複數相加 include using namespace std class complex 複數類 定義初始化表初始化complex類 complex double r,double i real r imag i 宣告成員函式,...

運算子過載與STL學習總結

運算子過載 不能過載的運算子 sizeof 運算子過載函式可以過載為成員函式和友元函式兩種。函式過載運算子 型別 operator運算子 參數列 返回型別 類名 operator 參數列 友元過載運算子 friend類名 operator 參數列 類名operator 參數列 成員運算子函式與友元運...