1.數據類型
C++新增了bool類型。
2.const與指針類型
const使用對比1,修飾 指針/常量 對比:
//1和2等價
const int *p = NULL;// p是指針,const對指針進行修飾,將限制通過指針修改p指向的數據;故不能通過此指針修改其指向的數據的值。
int const *p = NULL;
int * const p = NULL;// p是常量,然後int *將常量修飾爲指針,則整體爲指針常量;故不能修改指向。
const使用對比2:
// 完全等價
const int * const p = NULL;
int const * const p = NULL;
// 示例1
const int x = 3;
const int * const p = &x;// int * const p是常量指針,指向const int這個整型常量
p = &y;// 錯誤
*p = 4;// 錯誤
x = 5;// 錯誤
// 示例2
int x = 3;// 這裏不用const修飾
const int * const p = &x;
p = &y;// 錯誤
*p = 4;// 錯誤
x = 5;// 正確
// 引用也是一樣的情況,如果x不用const修飾,則直接通過x修改是可以的。
在聲明變量和其指針時,const的使用:
// 錯誤1,無法通過編譯
const int x = 3;
int *y = &x;
// 正確1
int x = 3;
const int *y = &x;
// 正確2
const int x = 3;
const int *y = &x;
我們也可以用權限範圍對此進行理解:
在const使用對比1,對比2 的代碼註釋中有寫對const和*修飾的作用,。
我們先看上方正確1 的代碼,我們可以直接使用x進行寫、讀操作(修改/獲取數據),但是y因爲有const修飾,所以只能通過y進行讀操作(獲取數據)。顯然,x的權限範圍 大於 y的權限範圍,所以這裏可以將&x賦給y。
再來看正確2 ,x只能進行讀操作,y也只能進行讀操作,x的權限範圍 等於 y的權限範圍,所以這裏也是正確的。
最後看錯誤1 的代碼,x只能進行讀操作,但y能進行讀、寫操作。x的權限範圍 小於 y的權限範圍,所以&x是無法賦給y的,故這種寫法一定是錯誤的。
3.const與引用(&)
int x = 3;
const int &y = x;// y爲x,const修飾引用,將限制通過引用修改其指向的數據;故不能通過y修改它指向的數據的值。
x = 10;// 正確
y = 20;// 錯誤
4.函數參數默認值
函數的參數列表:
// 正確
void fun(int i, int j = 5, int k = 10);
// 錯誤,k沒有默認值,不應該放在最右邊
void fun(int i, int j = 5, int k);
注意:有默認參數值的參數,必須在參數表的最右端。
聲明和定義:
// 聲明
void fun(int i, int j = 5,int k = 10);
// 定義
void fun(int i, int j, int k){
cout << i << j << k;
}
注意:在聲明中寫默認值即可,如果寫在定義中,有的編譯器可能會無法通過。
5.函數重載
在相同作用域內,用同一個函數名定義的多個函數,參數個數和參數類型不同。
6.內聯函數-inline
效率高,適合頻繁調用的函數,不過有條件。
要求邏輯簡單(不能有for等循環體)、不能是遞歸函數。
對編譯器來說inline
是建議性的,是否編譯成內聯函數還是由編譯器根據情況決定的。
故,內聯可以說只是一種編譯的方式。
7.內存管理
和C語言對比:
// C
void *malloc(size_t size);
void free(void *memblock);
// C++
int *p = new int;
delete p;
注:new、delete是運算符。
塊內存操作:
int *arr = new int[10];
delect []arr;
[重要]內存分配有失敗的風險,所以需要驗證:
int *p = new int[1000];
if(NULL == p){
// 內存分配失敗
}
[重要]內存釋放完畢,也需要將指針指向NULL,絕對不要留下野指針:
// 1.內存申請和釋放
int *p = new int;
if(NULL == p){
// 內存分配失敗
// 異常處理
}
delete p;
p = NULL;// 務必這樣做!
// 2.塊內存申請和釋放
int *p = new int[1000];
if(NULL == p){
// 內存分配失敗
// 異常處理
}
delete []p;
p = NULL;// 務必這樣做!
獲取數組元素個數:
// C++中沒有現成的獲取數組元素個數的方法,只有自己寫。
int count = sizeof(array) / sizeof(array[0]);
本篇爲視頻教程筆記,視頻如下: