標籤:
C++ 中的布爾類型:布爾類型只佔用一個bit ,但是如果連續定義多個布爾類型時,編譯器可能會多個布爾類型定義在一起。true 編譯器用1來表示。false 編譯器用0來表示。
將一個其他類型的資料賦給布爾類型變數:C++編譯器會將所有的非0的值轉換為true(1),將0 轉化為false(0)。
三木運算子 ? : :將一個三目運算子作為左值: (a>b?a:b) = 3 C語言不支援(三目運算子返回一個值),但在C++中支援(三目元算符返回變數)。 但是如果可能的傳回值有一個是常量值,那麼它就不能作為左值使用,如(a>b?1:b) = 3 非法。
引用:
C++中的引用:一個已經定義的變數的別名。 Type var , Type & name = var; 普通引用在聲明時必須用其他的變數進行初始化。引用作為函數參數聲明時不進行初始化。
const 修飾引用:const 使引用擁有唯讀屬性,但是變數本身還是原來的屬性。
當使用常量對const 引用進行初始化時,編譯器會給常量分配空間,並將引用名命名為這段空間的別名。不能給普通引用賦值為常量,但是可以給常引用賦值為常量。此時常引用是唯讀,除了在定義時,不能給它賦值。因此用一個常引用可以構成一個唯讀變數,如 const int & a = 10 a是一個唯讀變數。
引用在C++ 的內部實現是一個常指標:type & name ßàtype* const name。因此引用擁有一個4位元組的空間。
引用作為函數傳回值:返回局部變數的引用時,引用不能作為左值,也不能用它初始化其他引用,但是如果引用時靜態或者全域變數的引用時就可以。
C++ 函數探幽:
- 內嵌函式:inline int function(…), 內嵌函式可以替代宏程式碼片段,在編譯時間將函數體直接替代函數被調用的地方,這樣就減少了普通函數被調用時 的開銷(壓棧,跳轉等),但是內嵌函式本質上還是一個函數,不同於宏程式碼片段。內嵌函式聲明符inline 必須要和函數定義結合在一起,不能放在聲明處,否則編譯器忽略內聯請求。 雖然內嵌函式省時省空間,但是編譯器不一定準許函數的內聯請求,當C++編譯器不允許內聯請求時會將內嵌函式當做普通函數處理。
- 預設參數: C++中可以在函式宣告時為參數提供一個預設值,當函數調用時沒有提供這個參數的值,編譯器會自動用預設值代替。但是在函數定義時就不在指定預設參數值。預設參數有如下規則:
只有參數列表後面的部分參數才可以提供預設參數值,一但在一個函數調用中開始使用預設參數,那麼這個參數後的所有參數都必須使用預設參數,因此從開始使用預設參數的使用開始都後面的參數都要提供預設參數,否則編譯器將報錯。總之,在函式宣告時,如果一個參數開始提供預設參數,那麼後面的所有參數都要提供預設參數;在調用函數時,如果開始省略參數,那麼後面所有參數都使用預設參數。
- 函數佔位參數:佔位參數是在函數定義時只有型別宣告,沒有參數名聲明的參數。一般情況下函數體內部無法使用佔位參數。但是在調用時必須提供完整的參數個數。可以給佔位參數提供預設參數。意義:為函數的後續版本的擴充埋下伏筆;相容C語言中的不規範寫法。
C++ 雜碎文法