1. 程式人生 > >C++基礎系列之要點總結(1)

C++基礎系列之要點總結(1)

1.  C++是一種靜態資料型別語言,它的型別檢查發生在編譯時。因此,編譯器必須知道程式中每一個變數對應的資料型別。相比於C,它的變數可以在使用時即時定義或宣告使用。這樣既可以更加方便地宣告變數,又由於變數宣告之處即為其使用的位置而能清楚地知道變數存在的意義。

2.  不能對void *所指向的物件進行操作,因為我們並不知道該物件的具體型別,也就無法確定能在這個物件上做哪些操作。

3.  The key differences between pointer and reference:


4.  常量引用僅對引用可參與的操作做出了限定,對於引用物件本身是不是一個常量未做限定。即物件本身可以是非常量,允許通過其他途徑修改其值。


總結:普通型別可以向更細化的型別轉換,反之則行不通。

NOTE:引用是對指標的深層包裝,所以只有指標的引用,沒有引用的指標。

5.  常量表達式是指其值不會改變並且在編譯過程就能得到計算結果的表示式。

const int test =1;              //test 是常量表達式

const int sz =get_size();   //sz 並不是常量表達式

6.  auto型別(C11)說明符使編譯器自動確定表示式的型別,並將左值物件轉換之:


7.  遇到一條使用了類型別名宣告的語句時,不要錯誤地嘗試把類型別名替換成它本來的樣子來理解:


  如果這樣理解cstr: const char*cstr = 0;  //是對const pstring cstr的錯誤理解


8.  型別不同的變數之間不能互相賦值,之所以可以是因為存在一個隱藏的與右值型別相同的變數作為橋樑轉換。

9.  auto 一般會忽略頂層const,同時底層const則會保留下來(int i = 0):

(DZH:底層是指標所指或引用繫結物件的屬性,而上層則是物件本身的屬性)




    符號&、*只從屬於某個宣告符,而非基本資料型別的一部分

10.  decltype 作用是選擇並返回運算元的資料型別:


decltype 如果使用的是一個不加括號的變數,則得到的結果就是該變數的型別;如果給變數加上一層或多層括號,編譯器就會把它當成是一個表示式。

切記:decltype(())的結果永遠是引用!