C 學習筆記之 4 表示式 運算子與型別轉換

2021-08-19 01:57:42 字數 2765 閱讀 1671

算術運算子

邏輯和關係運算子

賦值運算子

遞增和遞減運算子、成員訪問運算子、條件運算子

位運算子

sizeof 運算子

型別轉換

運算子優先順序表結語

表示式由乙個或多個運算物件組成,對表示式求值將得到乙個結果。字面值和變數是最簡單的表示式,其結果就是字面值和變數的值,把運算子和運算物件組合可以生成較複雜的表示式

右值(rvalue):物件的值(內容)

關鍵字decltype作用於左值,得到的是引用型別

int a = 0;

int*p = &a;

decltype(*p) b; // 解引用運算子是生成左值,所以 b 結果是 int &, 即引用型別,未初始化

decltype(&p) c; // 取位址符生成右值,所以 c 結果是 int

**, 指標的指標

求值順序

優先順序規定了運算物件的組合方式,但是沒有說明運算物件按照什麼順序求值,如果表示式指向並修改了同乙個物件,將會引發錯誤並產生未定義的行為。

int i = f1() * f2();  // f1 和 f2 會在乘法之前呼叫,但卻不知道 f1 和 f2 的執行順序

int i = 0;

cout

<< i << " "

<< ++i << endl; // 未定義,可能輸出1 1,也可能是0 1

* 算數運算子能夠作用於任意算數型別,以及任意能轉換成算數型別的型別。算術運算子的運算物件和求值結果都是右值

*pbeg++; // 正確, 返回*pbeg, 然後++pbeg; 因為後置遞增運算子優先順序高於解引用運算子

string s1 = "a string", *p = &s1;

*p.size(); // 錯誤: p是乙個指標,沒有名為size的成員, 因為解引用運算子優先順序低於點運算子

注意:位運算是乙個很重要的知識點,需要深入學習

sizeof運算子返回一條表示式或乙個型別名字所佔的位元組數,結果為乙個size_t型別的常量表示式

sizeof的運算物件中解引用乙個無效指標仍然是一種安全的行為,因為指標實際上並沒有真正使用,sizeof不需要真的解引用指標也能知道它所指物件的型別。

sizeof運算子的結果部分地依賴於其作用的型別:

c++語言不會直接操作兩個不同型別的值,而是先根據型別轉換規則設法將運算物件的型別統一後再運算,由於是自動執行,故被稱作隱式轉換

何時發生隱式型別轉換

算數轉換是把一種算數型別轉換成另一種算數型別

某運算物件為無符號型別

命名的強制型別轉換cast-name(expression);, 其中cast-namestatic_cast,dynamic_cast,const_castreinterpret_cast

static_cast

任何具有明確定義的型別轉換,只要不包含底層const, 都可以使用static_cast

const_cast

reinterpret_cast

通常為運算物件的位模式提供較低層次上的重新解釋。reinterpret_cast本質上依賴於機器,非常危險,需要對涉及的型別和編譯器實現轉換的過程非常了解

int *ip;

char *pc = reinterpret_cast

(ip); // 等價於 char *pc = (char *) ip;

string str(pc); // 執行時錯誤,pc 實質上指的是乙個int

dynamic_cast

e 的型別必須符合一下三個條件中的任意乙個

轉換失敗時

// 指標型別的 dynamic_cast

// bp 指標指向 base(至少含有乙個虛函式), derived 是 base 的共有派生類

if(derived *dp = dynamic_cast

(bp))

else

// 引用型別的dynamic_cast

// 因為不存在控引用,對於引用失敗,應該捕獲異常

C 學習筆記 4 運算子與表示式

字串連線運算 表示求餘,乘方運算需要用math函式。i i 這種表示式誰會寫!短路邏輯運算 第乙個運算元為假則不判斷第二個運算元 第乙個運算元為真則不判斷第二個運算元 一般常用 和 常去替代 和 在c 裡,string s hello,300 5 號 輸出hello,3005號 只要 前後有字串,會...

C 之表示式與運算子

地基牢,樓不搖 一直吃在基礎的虧,vb vb沒學好,sql sql沒學好,少年該奮鬥了 c 基礎打紮實 表示式在 c 程式中應用廣泛,尤其是在計算功能中,往往需要大量的表示式。而大多數表示式都使用運算子,運算子結合乙個或乙個以上的運算元,便形成了表示式,並且返回運算結果 表示式是由運算子和運算元組成...

C學習筆記(七)運算子與表示式

1.算術運算子 自增,自減運算子 例1int num int i 2 num i i i i 結果 num 6 i 6 解析 運算子的結束標誌 分號 逗號,函式括號 例2 int num int i 2 num i i i i 結果 num 19 i 6 解析 先算左邊兩表示式的值 num 4 4 ...