C++ Primer:第4章 表達式


第4章:表達式

4.1 基礎(chǔ)

基本內(nèi)容:

  1. 一元運算符、二元運算符、三元運算符、函數(shù)調(diào)用(特殊的運算符)。
  2. 運算符的優(yōu)先級和結(jié)合律,運算對象的求值順序。
  3. 運算對象轉(zhuǎn)換,重載運算符,左值和右值。

備注:

  1. 左值使用對象的身份(位置),右值使用對象的值(內(nèi)容)。左值可替換右值,反之不行。
  2. 明確求值順序的4個運算符:與(&&) ,或(|| ),條件(?: ),逗號(,)。

4.2 算術(shù)運算符

基本內(nèi)容:

  1. 一元正號(+)、一元負號(-)。
  2. 乘(*)、除(/)、取余(%)。
  3. 加(+)、減(-)。

備注:

  1. 算術(shù)運算符滿足左結(jié)合律,其運算對象和求值結(jié)果都是右值。
  2. 布爾值不應(yīng)參與運算。
  3. 算術(shù)表達式可能因為除數(shù)為0或溢出等情況產(chǎn)生未定義結(jié)果。
  4. 除法會刪除余數(shù),商一律向0取值;取余的運算對象必須是整數(shù),m%(-n)等價于m%n,(-m)%n和(-m)%(-n)等價于-(m%n) 。

4.3 邏輯和關(guān)系運算符

基本內(nèi)容:

  1. 邏輯非(!)。
  2. 小于(<),小于等于(<=),大于(>),大于等于(>=).
  3. 相等(=),不相等(!=)。
  4. 邏輯與(&&)。
  5. 邏輯或(||)。

備注:

  1. 除邏輯非(!)是右結(jié)合律外,其它邏輯和關(guān)系運算符都是左結(jié)合律。所有邏輯和關(guān)系運算符的運算對象和求值結(jié)果都是右值。
  2. 邏輯與(&&)和邏輯或(||)使用短路求值(只有左側(cè)對象無法推出結(jié)果時才會計算右側(cè)對象)。
  3. 引用類型可避免對過大元素的拷貝。
  4. 比較運算時,除非比較對象是布爾型,否則不要用true和false。

4.4 賦值運算符

基本內(nèi)容:

  1. 賦值(=)。
  2. 符合賦值運算符(+=, -=, *=, /=, %=, <<=, >>=, &=, ^=, |=)

備注:

  1. 賦值運算符滿足右結(jié)合律,賦值運算結(jié)果是左側(cè)運算對象,它是一個可修改的左值。
  2. 初始化!=賦值。若左側(cè)運算對象是內(nèi)置類型,賦值時初始值列表最多包含一個值,而初始化可以是多個。如int i1[3] = {1, 2, 3};是對的,int i2[3];i2 = {1, 2, 3};是錯的。
  3. 復(fù)合運算符等價于a = a op b;

4.5 遞增和遞減運算符

基本內(nèi)容:

  1. 遞增(++),遞減(--)。
  2. 前置版本將對象本身作為左值返回,后置版本將對象原始值的副本作為右值返回。

備注:

  1. 除非必須,否則不要使用后置版本。因為后置版本需存儲原始值作為返回值,編譯器開銷更大。
  2. 后置遞增(遞減)運算符優(yōu)先級>解引用運算符。*p++等價于*(p++)。

4.6 成員訪問運算符

基本內(nèi)容:

  1. 點運算符(.), 箭頭運算符(->)。
  2. ptr->men等價于(*ptr).men。
  3. 優(yōu)先級:點運算符、箭頭運算符 > 遞增遞減運算符 > 解引用運算符。

4.7 條件運算符

基本內(nèi)容:

  1. 條件運算符(?:)
  2. 條件運算符形式:cond ? exp1 : exp2。若cond 為真則執(zhí)行exp1 ,否則執(zhí)行exp2。
  3. 條件運算的嵌套層數(shù)最好不超過兩到三層。

4.8 位運算符

基本內(nèi)容:

  1. 位求反(~)。
  2. 左移(<<),右移(>>)。
  3. 位與(&)。
  4. 位異或(^)。
  5. 位或(|)

備注:

  1. 位運算符的運算對象是整型,用于設(shè)置和檢查二進制位。
  2. 位運算符盡量只用于處理無符號整數(shù),有符號整數(shù)的符號位無明確處理方法,具體依賴于機器。
  3. 移位運算符(<<和>>)滿足左結(jié)合律,右側(cè)運算對象不能為負,且小于結(jié)果位數(shù)。

4.9 sizeof運算符

基本內(nèi)容:

  1. sizeof運算符形式:sizeof (type) 或sizeof expr。
  2. sizeof滿足右結(jié)合律,與解引用運算符優(yōu)先級相同。

4.10 逗號運算符

基本內(nèi)容:

  1. 逗號運算符先算左側(cè)表達式,丟棄其結(jié)果,再算右側(cè)表達式,返回其結(jié)果。

4.11 類型轉(zhuǎn)換

基本內(nèi)容:

  1. 隱式轉(zhuǎn)換:算術(shù)轉(zhuǎn)換,整型提升,無符號類型轉(zhuǎn)換,數(shù)組轉(zhuǎn)指針,指針間轉(zhuǎn)換,轉(zhuǎn)換成布爾類型,轉(zhuǎn)換成常量,類類型定義轉(zhuǎn)換。
  2. 顯式轉(zhuǎn)換:static_cast, dynamic_cast, const_cast, reinterpret_cast。

備注:

  1. 避免強制類型轉(zhuǎn)換。

4.12 運算符優(yōu)先級表

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容