4 1 C 運算子基本概念

2022-09-18 17:15:09 字數 1180 閱讀 9313

目錄4.1.2 優先順序、結合律與求值順序

一些運算子指定了求值順序

再述求值順序

操作符可視為乙個函式,用引數,***,返回值來分析它

cout<>操作符

操作符的返回值可以分為左值(lvalue)和右值(rvalue)

對指定的類重新定義某些操作符的操作,但無法改變其運算物件的個數,優先順序和結合律

《c++ primer(英)》137,對應中文版123:

優先順序規定了運算物件的組合方式,但是沒有說明運算物件按照什麼順序求值。在大多數情況下,不會明確指定求值的順序。對於如下的表示式

int i = f1()* f2();

我們知道f1和f2一定會在執行乘法之前被呼叫,因為畢竟相乘的是這兩個函式的返回值。但是我們無法知道到底f1在f2之前呼叫還是f2在f1之前呼叫。

因此,當在乙個表示式的某處改變了乙個變數的值,而在該表示式的另一處又使用到它,可能會產生乙個未定義的結果,這是乙個隱藏錯誤。

但是,在g++ 8.1版本下,編譯器可以處理上述情況,輸出0 1

個人推測:編譯器在執行cout子表示式i++i從左到右轉為字面量:cout<<0<

輸出0 1

#includeusing namespace std;
int m = 0; //全域性變數,f,g,j都可以改變m的值

//三個函式都改變了m的值

int f(); //m++

int g(); //m+=2

int j(); //m*=2

int main()

cout<*it = toupper(*it++);可能被解釋為

修改後:

#include#includeusing namespace std;

int main()

cout<

C 運算子過載的基本概念

c 預定義的運算子,只能用於基本資料型別的運算 整型 實型 字元型 邏輯型等等,且不能用於物件的運算。但是我們有時候又很需要在物件之間能用運算子,那麼這時我們就要過載運算子,使得運算子能用於物件之間的運算。比如,在數學上,兩個複數可以直接進行 等運算,但在c 中,直接將 或 用於複數物件是不允許的。...

11 運算子過載的基本概念

c 預定義的運算子,只能用於基本資料型別的運算 整型,實型,字元型,邏輯型。不能用於物件的運算,有時候又需要物件之間的運算。在數學上,兩個符數可以直接進行 等運算。但是在c 中,直接將 或者 用於複數物件是不允許的。有時候希望,讓物件也能通過運算子進行計算。這樣 更加簡介,更加易於理解。例如 com...

c 運算子過載以及一些基本概念

c primer第四版435 1.賦值 下標 呼叫 成員訪問箭頭 等操作符必須定義為成員,定義為非成員時,編譯器報錯 2.像賦值一樣,符合賦值操作符通常應定義為類的成員,但是定義為非成員的復合賦值操作符時不會出現編譯錯誤 3.改變物件狀態或給定型別緊密聯絡的其他一些操作符,如自增,自減和解引用,通常...