c++幾個基本語法

命名空間:

        在C/C++中,變量、函數和後面要學到的類都是大量存在的,這些變量、函數和類的名稱將都存在於全局作用 域中,可能會導

致很多衝突。使用命名空間的目的是對標識符的名稱進行本地化,以避免命名衝突或名字污染。

命名空間的定義:需要使用到namespace關鍵字,後面跟命名空間的名字,然後接一對{}即可

缺省參數:(全缺省和半缺省)

        缺省參數是聲明或定義函數時爲函數的參數指定一個默認值。在調用該函數時,如果沒有指定實參則採用該默 認值,否則使

用指定的實參。

注意:

1. 半缺省參數必須從右往左依次來給出,不能間隔着給

2. 缺省參數不能在函數聲明和定義中同時出現

3. 缺省值必須是常量或者全局變量

4. C語言不支持(編譯器不支持) 

 函數重載 :是函數的一種特殊情況,C++允許在同一作用域中聲明幾個功能類似的同名函數,這些同名函數的形 參列表(參數個

數 或 類型 或 順序)必須不同,常用來處理實現功能類似數據類型不同的問題,因爲函數在底層的命名修飾規則不同,所以c++

支持函數重載,c語言不支持 ,但是可以在c++中以c語言的風格來編譯程序,這時只要加上extern "C"就可以了。

函數的編譯過程需要經歷以下幾步:

1,預處理 //宏替換,頭文件展開,條件編譯,去掉註釋

2,編譯 //檢查語法,生成彙編代碼

3,彙編 //把彙編代碼轉換成機器代碼

4,鏈接 //生成可執行程序

名字修飾:是一種在編譯過程中,將函數、變量的名稱重新改編的機制,簡單來說就是編譯器爲了區分各 個函數,將函數通過

某種算法,重新修飾爲一個全局唯一的名稱。

引用:

引用不是新定義一個變量,而是給已存在變量取了一個別名,編譯器不會爲引用變量開闢內存空間,它和它引 用的變量共用

同一塊內存空間

引用特性 :
1. 引用在定義時必須初始化

2. 一個變量可以有多個引用

3. 引用一旦引用一個實體,再不能引用其他實體

引用的使用場景:

1,做參數:

void Swap(int& left, int& right) 
{   
    int temp = left;   
    left = right;   
    right = temp; 
}

2,做返回值:引用做返回值時需要注意:

如果函數返回時,離開函數作用域後,其棧上空間已經還給系統,因此不能用棧上的空間作爲引用類型 返回。如果以引用類型

返回,返回值的生命週期必須不受函數的限制(即比函數生命週期長)。
 

int& TestRefReturn(int& a) 
{   
    a += 10;  
    return a; 
} 

引用和指針的區別:

1. 引用在定義時必須初始化,指針沒有要求

2. 引用在初始化時引用一個實體後,就不能再引用其他實體,而指針可以在任何時候指向任何一個同類型實 體

3. 沒有NULL引用,但有NULL指針

4. 在sizeof中含義不同:引用結果爲引用類型的大小,但指針始終是地址空間所佔字節個數(32位平臺下佔4 個字節)

5. 引用自加即引用的實體增加1,指針自加即指針向後偏移一個類型的大小

6. 有多級指針,但是沒有多級引用

7. 訪問實體方式不同,指針需要顯式解引用,引用編譯器自己處理

8. 引用比指針使用起來相對更安全

內聯函數:

         以inline修飾的函數叫做內聯函數,編譯時C++編譯器會在調用內聯函數的地方展開,沒有函數壓棧的開銷, 內聯函數提

升程序運行的效率,

特性:

1. inline是一種以空間換時間的做法,省去調用函數額開銷。所以代碼很長或者有循環/遞歸的函數不適宜使 用作爲內聯函數。

2. inline對於編譯器而言只是一個建議,編譯器會自動優化,如果定義爲inline的函數體內有循環/遞歸等 等,編譯器優化時會忽

略掉內聯。

3. inline不建議聲明和定義分離,分離會導致鏈接錯誤。因爲inline被展開,就沒有函數地址了,鏈接就會找 不到

宏的優缺點:

優點:1.增強代碼的複用性。 2.提高性能。 

缺點:1.不方便調試宏。(因爲預編譯階段進行了替換) 2.導致代碼可讀性差,可維護性差,容易誤用。3.沒有類型安全的檢查

c++一般使用什麼替換宏:1. 常量定義 換用const修飾,或者枚舉 2. 函數定義 換用內聯函數

auto關鍵字:

使用auto修飾的變量,是具有自動存儲器的局部變量,可以自動推導變量類型。

注意:

使用auto定義變量時必須對其進行初始化,在編譯階段編譯器需要根據初始化表達式來推導auto的實際類 型。因此auto並非是

一種“類型”的聲明,而是一個類型聲明時的“佔位符”,編譯器在編譯期會將auto替換爲變 量實際的類型。

auto的使用:

1. auto與指針和引用結合起來使用,用auto聲明指針類型時,用auto和auto*沒有任何區別,但用auto聲明引用類型時則必須加&

2. 在同一行定義多個變量,當在同一行聲明多個變量時,這些變量必須是相同的類型,否則編譯器將會報錯,因爲編譯器實際

只對第一個 類型進行推導,然後用推導出來的類型定義其他變量。

auto不能使用的場景:

1. auto不能作爲函數的參數

2. auto不能直接用來聲明數組

3. auto在實際中常見的優勢用法就是和範圍for循環,還有lambda表達式等進 行配合使用。

4. auto不能定義類的非靜態成員變量

 6. 實例化模板時不能使用auto作爲模板參數

範圍for循環:

對於一個有範圍的集合而言,由程序員來說明循環的範圍是多餘的,有時候還會容易犯錯誤。因此C++11中引 入了基於範圍的

for循環。for循環後的括號由冒號“ :”分爲兩部分:第一部分是範圍內用於迭代的變量,第二 部分則表示被迭代的範圍

範圍for循環的使用條件:

1. for循環迭代的範圍必須是確定的 對於數組而言,就是數組中第一個元素和後一個元素的範圍;對於類而言,應該提供begin

和end的方法, begin和end就是for循環迭代的範圍

2. 迭代的對象要實現++和==的操作。
 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章