C 過載運算子與實際運算子的優先順序問題

2021-08-29 16:31:11 字數 583 閱讀 4297

今天來討論有關過載運算子與實際運算子的優先順序問題。

下面的**:

#include#include#include#includeusing namespace std;

main()

{ string a="1",b="2";

int c=1,d=2;

cout<<((a=b)=(b=a))《輸出結果為

1

2

明明**是一樣的,為什麼結果不同?

原來,這涉及類過載運算子與實際運算子的差別。

首先,string基於乙個類,a和b其實是兩個物件,呼叫了=的過載函式。而int是c++提供的一種資料型別,c和b是兩個基礎變數,呼叫了普通運算子。首先,不論a=b還是d=c,返回的都是等號右邊的值,所以這裡沒有問題。

可是,由於一般的計算有優先順序關係,c和d的運算中,先計算了c=d(c變為d的值)再計算了d=c(還是d的值),也就相當於d=d的值,返回d的值2。

過載就不同了,它沒有優先順序關係,a變為b同時b變為原來的a,實際交換了a和b,變成b=原來的a值,返回a值是1。

上述純屬個人觀點,如有謬誤還請指正。

過載運算子

題目描述 定義乙個矩形類,資料成員包括左下角和右上角座標,定義的成員函式包括必要的建構函式 輸入座標的函式,實現矩形加法,以及計算並輸出矩形面積的函式。要求使用提示中給出的測試函式並不得改動。兩個矩形相加的規則是 決定矩形的對應座標分別相加,如 左下角 1,2 右上角 3,4 的矩形,與 左下角 2...

過載運算子

include include using namespace std class test test const int a v a test const test t1 v t1.v 以下過載小於號 比較兩個物件的大小 bool operator const test t1 const 比較物件...

過載運算子

1.當乙個過載的運算子是成員函式時,this繫結到左側運算物件。成員運算子函式的引數比運算物件的數量少乙個。非成員函式呼叫等價於 data1 data2 普通表示式 operator data1,data2 等價的函式呼叫成員函式呼叫等價於 data1 data2 普通表示式 data1.opera...