1. 程式人生 > >清華大學《C++語言程式設計基礎》線上課程筆記01

清華大學《C++語言程式設計基礎》線上課程筆記01

使用除法的注意事項

double b = 4.0 * 1/239.0;

因為整數相除結果取整,如果引數寫1/239,結果就都是0

浮點數注意事項

浮點數是近似儲存,所以不能直接比較兩個浮點數的大小,
可以比較差值小於10的多少負多少次方.

逗號運算子

a=3 * 5,a * 4;

先計算左邊,後計算右邊,結果返回右邊,a=60.

sizeof

sizeof(型別名)
sizeof 表示式

計算所佔位元組數


位操作

& :某些位置0 或者 取出制定位;  
| :某些位置1;
^ :特定位翻轉;  
<< :低位補0,高位捨棄;  
>> :低位捨棄,無符號高位補0,有符號高位補符號位

迴圈

do-while :與while的差別在於“至少執行一次”;  
break :從迴圈體或switch語句中跳出;  
continue :結束此次迴圈,判斷是否進行下一次迴圈;

自定義型別

為已有型別另外命名

1.
typedef double Number;
Number i;

typedef int sum;
sum x;
2.
using Number=double;
using sum=int;

列舉型別

enum weekday={sunday=7,monday=1,tuesday,wednesday,thursday,friday,saturday};

auto型別

編譯器通過初始值自動推斷變數的型別
auto val = val1 + val2;
如果 val1+val2 是 int 型別,則 val 是 int 型別;

deltype型別

定義一個變數與某一表達式的型別相同,但並不用該表示式初始化變數  
例如:decltype(i) j = 2; 
j的值為2,但是和i型別相同

函式的呼叫

若函式定義在呼叫點之前,可以不另外宣告;
若函式定義在呼叫點之後,必須要在呼叫函式前宣告函式原型:

函式遞迴

將引數為n的問題拆解為n-1的問題,依次往下拆解,到簡單的求解步驟遞迴結束,依次返回進行計算,最終得出結果。

引用

return只能返回一個值,當需要檢視多個值的時候可以用引用。

1.定義時發生繫結,且生存週期中只能繫結一個變數;
2.引用不是物件,不在程式中不佔用記憶體空間,沒有地址,無法被指標找到

就像是目前在追的小說《劍來》中上五境大佬的分身,本尊端坐雲端,分身下界經歷一些事情,消散後本尊可以收穫下界歷練所經過的一切,且分身本身不佔據一份新的氣運。

含有可變引數的函式

initializer_list <型別名> lst;
必須同類型,C++11標準新加的;
用到再說。

行內函數

編譯時在呼叫處用函式體進行替換,不走“呼叫子函式再返回呼叫點”這樣相對開銷較大的流程,節省了引數傳遞、控制轉移等開銷。

inline宣告只是一個對編譯器的建議,好的編譯器自己有優化功能,不一定採納。
 p.s.行內函數體內不能有迴圈語句和 switch 語句;

帶預設引數值的函式

特點:可以預先設定預設的引數值,呼叫時如給出實參,則採用實參值,否則採用預先設定的預設引數值。

在何處寫預設值

1.函式體定義在呼叫之後,或者在另一個檔案中,則需要把預設引數寫在宣告中,而函式體定義中不能再寫;
2.函式體定義在呼叫之前,則不需要宣告,直接在定義中的形參列表中寫就可以了;

有預設引數的形參必須列在形參列表的最右

int add(int x, int y = 5, int z = 6);//正確
int add(int x = 1, int y = 5, int z);//錯誤

函式過載

作用:可以用同一個函式名來處理引數不同的同一類運算;
要求:形參必須不同,個數不同或型別不同

與返回值型別無關

幕間:VS 2013 Debugger

F10:step over是逐過程,不看呼叫細節;
F11:step into是逐語句,可以檢視呼叫函式內部;
ctrl+F10:run to cursor執行到游標處,也可以右鍵尋找;