引言:C++兼容C的大部分內容,但其中仍有許多小細節的東西需要大家注意
一.C++的第一個程序
#include <iostream>
using namespace std;int main()
{cout << "hello world!" << endl;return 0;
}
第一次看這個是否感覺一頭霧水?不要擔心,我們會在后續的學習中了解并熟悉它們的。
二.命名空間
1.namespace的定義
1>命名空間的成員可以是變量,函數,類型等
namespace xw
{int a=0;int* b;
}
2>本質:namespace本質上是一個域,獨立于全局域,不同域里可以定義同名變量等
3>namespace可以定義在全局域中,也可以嵌套定義
4>C++標準庫都放在一個名為std的命名空間中
5>C++中包含局部域,全局域,命名空間域,類域。域會影響在編譯時查找一個變量/函數/類型的出處,其中全局域和局部域還會影響變量的生命周期
2.namespace的價值:對標識符的名稱進行本地化,避免命名沖突或名字污染
3.命名空間的使用
補:::域作用限定符
? ? ? ? 當左邊啥都沒有時默認在全局域中取值,若左邊指定域,則在特定域中取值
1>指定命名空間訪問
2>使用using將命名空間中某個成員展開
3>展開命名空間中全部成員(在項目中不建議,因為沖突風險太大,多用于日常代碼練習)
三.C++的輸入與輸出
1.<iostream>是標準輸入輸出流庫,定義了標準的輸入輸出對象
2.std::cin是istream類的對象,它主要是面向窄字符的標準輸入流
3.std::cout是ostream類的對象,它主要是面向窄字符的標準輸出流
4.std::endl是一個函數,待流輸入輸出時,相當于插入一個換行符并且刷新緩沖區
5在C++中.<<是流插入運算符, >>是流提取運算符
注:在C和C++中有很多相同的符號,但可能用法不一樣,要多加注意
6.C++的輸入輸出可以自動識別變量類型,相比于C更方便
四.缺省參數
1.定義:在聲明或定義函數時為函數的參數指定一個缺省值
2.用法:在調用函數時若沒有給定實參則調用缺省值,否則調用傳入的實參值
3.分類:全缺省,半缺省(規定半缺省參數必須從右往左依次連續缺省,不可間隔跳躍給缺省值)
4.注意事項
1>帶缺省參數的函數調用,C++規定必須從左往右給實參,不能跳躍給實參
2>當函數定義和聲明分離時,不能再函數聲明和定義中同時給缺省值,規定在函數聲明中給缺省值
五.函數重載
C++中將出現在同一作用域,同名函數但形參不同(可以是形參個數不同,也可以是形參類型不同,或形參的順序不同)的函數稱為函數重載
六.引用
1.引用的概念
1>引用相當于給變量起了個別名,不會為其新開一塊空間,而是與原變量公用一塊空間
2>類型& 引用別名=引用對象
2.引用的特性
1>引用在定義時必須初始化
2>一個變量可以多次引用
3>引用一旦引用一個實體就不可以再引用其他實體(在C++中引用定義后不能改變指向)
3.引用的使用
1>引用在實踐中只要用于引用傳參和引用作為返回值,可以減少拷貝,提高效率和改變引用對象的同時改變被引用對象
2>引用傳參和指針傳參的功能類似,但相對而言引用傳參更方便
4.const引用
1>對于const對象必須使用const引用,對于普通對象也可以使用const引用,因為對象在引用過程中訪問權限只能縮小不能放大
2>對于引用對象是const對象,變量間的運算時必須使用const引用,因為他們都具有常屬性
補:在進行變量間的運算時,編譯器需要一塊空間暫時存儲表達式的求值結果,所以就臨時創建一個未命名的對象即臨時對象,臨時對象具有常屬性
5.指針 vs 引用
引用和指針在實踐中相輔相成,功能有所重疊,但各有特點
引用可看作為一個變量取別名,不新開空間 | 指針是存儲一個變量的地址,需要開辟新空間 |
引用在定義時必須初始化 | 指針在定義時可以不初始化 |
引用在定義后不可改變指向 | 指針可以改變指向 |
引用是直接訪問對象 | 指針是間接訪問對象 |
引用的類型大小即被引用對象的類型大小 | 指針的大小是地址的大小(4字節/8字節) |
引用很少出現空引用問題,比較安全 | 指針易出現野指針,空指針問題 |
七.inline
1.用inline修飾的函數叫內聯函數,編譯的時候C++編譯器會在調用的地方展開內聯函數,這樣調用函數時就需要建立棧幀,可以提高效率
2.當函數短小且調用頻繁時建議使用inline,除此之外當你使用內聯函數時,編譯器會根據實際情況選擇是否展開內聯函數
3.C++引入內聯函數是為了替代C的宏函數,因為宏函數中的坑太多
4.內聯函數的定義和聲明不能放在兩個文件中,這樣做會導致鏈接錯誤
八.nullptr
1.在C++中NULL代表字面常量0,在C中表示無類型指針(void*)的常量
2.在C++中,nullptr是一種特殊類型的字面量,可以轉換成任意其它類型的指針類型,但不能轉換成整型.