算術運算子
邏輯和關係運算子
賦值運算子
遞增和遞減運算子、成員訪問運算子、條件運算子
位運算子
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-name
是static_cast
,dynamic_cast
,const_cast
和reinterpret_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 ...