【C++Primer---C++知識點記錄III---錶達式、語句、含糊】

Micmic33 2022-06-23 07:09:57 阅读数:314

c++primer---c++primeriii---iii含糊

基礎

左值和右值

lvalue代錶一個在內存中占有確定比特置的對象(換句話說就是有一個地址)。
rvalue通過排他性來定義,每個錶達式不是lvalue就是rvalue。因此從上面的lvalue的定義,rvalue是在不在內存中占有確定比特置的錶達式。

在C++中一個簡單的歸納:當一個對象被用作右值時,用的是對象的值(內容),當一個對象被用作左值時,用的是對象的身份(在內存中的比特置)

一個重要的原則是在需要右值的地方可以用左值來代替,但是不能把右值當做左值使用

右值引用(C++11)

有四種運算符明確規定了運算對象的求值順序

&&——要求先求左側運算對象的值,只有當左側運算對象的值為真時才繼續求右側運算對象的值

||    ?:   ,

進行比較運算時除非比較的對象是布爾類型,否則不要使用布爾字面值true和false進行比較

if(val)和if(!val)就可 (只要val是非0值就是真

遞增和遞减運算符

前置++是首先將運算對象+1,然後將改變後的對象作為求值結果,將對象本身作為左值返回

後置++也會將運算對象+1,但求值結果是運算對象改變之前的那個值的副本,將對象原始值的副本作為右值返回

建議:除非必須,否則不使用遞增運算符的後置版本

在這時候用後置(而且要多用這種間接的寫法)

cout<<*p++<<endl
//取代
cout<<*p<<endl;
p++;

成員訪問運算符

ptr->mem 等價於 (*ptr).mem

比特運算符

比特運算符作用於整數類型的運算對象,並把運算對象看成是二進制比特的集合

sizeof運算符

sizeof(type)

sizeof expression

sizeof並不會計算其運算對象的值!

命名的强制類型轉換p144 

-------------------------------------------------------------------------------------------------------------------------------

語句

空語句:在程序某處語法上需要一條語句,但邏輯上不需要,就可以用只有一個分號的空語句

*使用空語句應加上注釋

符合語句(塊):花括號括起來,語法上需要一條語句,但邏輯上需要多條語句

switch語句:

  •         注意別忘記寫break
  •         即便什麼都不做,定義一個default:標簽也是有用的

for循環語句頭中定義的對象只在for循環體內可見

跳轉語句

break:

        負責終止離它最近的while,do while,for,switch語句,並從這些語句之後的第一條語句開始執行

continue:

        終止最近的循環中的當前迭代並立刻開始下一次迭代,只能出現在for,while和do while循環的內部。它同樣也作用於離它最近的

try語句塊和异常處理

throw錶達式,异常檢測部分使用throw錶達式來錶示它遇到了無法處理的問題,我們說throw引發了异常

try語句塊,异常處理部分使用try語句塊處理异常,try語句塊以try關鍵字開始,以一個或多個catch子句結束。try語句塊中代碼拋出的异常通常會被某個catch子句處理。catch子句也被稱為异常處理代碼

一套异常類,用於在throw錶達式和相關的catch子句之間傳遞异常的具體信息

 

其基本思想是:函數 A 在執行過程中發現异常時可以不加處理,而只是“拋出一個异常”給 A 的調用者,假定為函數 B。

拋出异常而不加處理會導致函數 A 立即中止,在這種情况下,函數 B 可以選擇捕獲 A 拋出的异常進行處理,也可以選擇置之不理。如果置之不理,這個异常就會被拋給 B 的調用者,以此類推。

如果一層層的函數都不處理异常,异常最終會被拋給最外層的 main 函數。main 函數應該處理异常。如果main函數也不處理异常,那麼程序就會立即异常地中止。

throw 錶達式;
try {
語句組
}
catch(异常類型) {
异常處理代碼
}
...
catch(异常類型) {
异常處理代碼
}

try…catch 語句的執行過程是:
執行 try 塊中的語句,如果執行的過程中沒有异常拋出,那麼執行完後就執行最後一個 catch 塊後面的語句,所有 catch 塊中的語句都不會被執行;
如果 try 塊執行的過程中拋出了异常,那麼拋出异常後立即跳轉到第一個“异常類型”和拋出的异常類型匹配的 catch 塊中執行(稱作异常被該 catch 塊“捕獲”),執行完後再跳轉到最後一個 catch 塊後面繼續執行

(80條消息) C++异常處理 詳解_Yuyao_Xu的博客-CSDN博客

-----------------------------------------------------------------------------------------------------------------------------

局部對象

形參和函數體內部定義的變量統稱為局部變量,僅在函數的作用域內可見。

在所有函數體之外定義的對象存在於程序的整個執行過程中,此類對象在程序啟動時被創建,直到程序結束才會銷毀。

自動對象:只存在於塊執行期間的對象,例如形參

局部靜態對象:某些時候,有必要讓局部變量的生命周期貫穿函數調用及之後的時間。可以將局部變量定義成static類型從而獲得這樣的對象。它直到程序終止時才被銷毀。如果靜態局部對象沒有顯式的初始值,它將初始化為0。

函數聲明

函數的名字必須在使用之前聲明。

函數聲明要包含函數的三要素----返回類型,函數名,形參類型

函數聲明也稱為函數原型

和變量一樣,建議函數在頭文件中聲明在源文件中定義

  • 在C++語言中,建議使用引用類型的形參代替指針。
  • 使用引用避免拷貝
  • 如果函數無需改變引用形參的值,最好將其聲明為常量引用

const形參和實參

頂層const作用於對象本身,使用實參初始化形參時會忽略掉形參的頂層const。

盡量使用常量引用(書p191-192)

數組形參(此處還需學習)

形參可以寫成:

const int *
const int[] //函數的意圖是作用於一個數組
const int[10] //這裏的維度錶示我們期望數組含有多少元素,實際不一定

數組是以形參的形式傳遞給函數的

管理數組實參有三種方法

  1. 使用標記指定數組長度,比如C風格字符串的空字符
  2. 傳遞指向數組首元素和尾後元素的指針
  3. 顯式傳遞一個錶示數組大小的形參

形參還能是數組的引用

void print(int (&arr)[10]){}

含有可變形參的函數

C++11-----

版权声明:本文为[Micmic33]所创,转载请带上原文链接,感谢。 https://gsmany.com/2022/174/202206230621308834.html