操作符過載(三)

2022-07-19 06:33:14 字數 1934 閱讀 6571

目錄前面兩次筆記都是c++中可以過載且無***的操作符,本次筆記比較特殊,主要列出兩個c++語法允許過載、但在工程中不應該(不允許)過載的操作符:

這兩個操作符在工程中不允許過載的原因是:過載後無法完全實現操作符的原生語義。

先來回憶一下邏輯操作符的原生語義

c++語法是允許過載邏輯操作符的,看下面的示例**

#include #include using namespace std;

class test

int value() const

};bool operator && (const test &l, const test &r)

bool operator || (const test &l, const test &r)

test func(test i)

int main()

else

cout << endl;

/** 根據短路法則,期望的正確輸出為:

**中注釋了我們期待的正確輸出,但實際執行結果乙個都沒對上,為什麼呢?

因此,在工程中應當避免過載邏輯操作符,

建議採用過載比較操作符或提供成員函式的方式,來代替過載邏輯操作符。

逗號操作符,可以構成逗號表示式,下面是逗號表示式的原生語義

#include #include using namespace std;

void func(int i)

int main()

; (3, 4, 5),

(6, 7, 8)

};int i = 0;

int j = 0;

while (i < 5)

func(i), //逗號表示式,等價於func(i), i++;

i++;

cout << endl;

for (i = 0; i < 3; i++)

}cout << endl;

(i, j) = 6; //逗號表示式,等價於 j = 6;

在c++中過載逗號操作符是合法的,過載函式的引數必須有乙個是類型別,且過載函式的返回值型別必須是引用

class &operator , (const class &a, const class &b)

看下面的示例**

雖然第44行輸出結果和預期相符,但第43行輸出和預期不符,原因和邏輯操作符過載一樣,都是由函式引數計算順序的不確定性造成的,也就是說:

操作符過載

ifndef vertex h define vertex h class vertex vertex float px float py float pz vertex operator const vertex p vertex operator const vertex p void oper...

操作符過載

1.操作符是靜態方法,返回值表示操作結果,引數是運算元。2.操作符過載需要在過載的操作符前加上operator關鍵字。3.最好少用操作符過載,只有在意義明晰而且與內建類的操作一致時才適合使用,以免造成混亂。以建立的分數類 fraction 中的 為例,該分數類中有兩個int型的私有屬性 分子 num...

過載操作符

1.過載操作符1.1 限制過載操作符具有以下限制 1 只有c 預定義的操作符集中的操作符才可以被過載 2 對於內建型別的操作符,它的預定義不能被改變,應不能為內建型別過載操作符,如,不能改變int型的操作符 的含義 3 也不能為內建的資料型別定義其它的操作符 4 只能過載類型別或列舉型別的操作符 5...