1、C++中的const
(1)、C++中的const是真正的常量,可以進行數組大小的定義;
代碼如下:
#include<iostream>
using namespace std;
#define A 10
int main(void){
int a = 10;
int array[a]; //Linux核心支援這樣定義數組,其他的編譯器不支援
const int a = 10; //這裡是常量,是以可以進行下面的數組大小的确定;
int array[a]; //任何平台都是對的,const編譯時,執行;
return 0;
}
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5CNxQTMzUDMz81ctQzXw12dtMzXtdXLwgHMwUzXodXLn5GcuAzMyEUW2FzNxN1bBFUQ1Q3UPhnZqZ0MnFTbvl2S39CXGF0LcFEOvwVMw00LcJDMzZWe39CXt92Yu8GdjFTNuczcvw1LcpDc0RHaiojIsJye.png)
(2)、C++中常引用時,必定開辟了新的記憶體空間;
#include<iostream>
using namespace std;
int main(void){
//int &b = 10; //普通引用,引用一個常量,常量沒有記憶體位址,引用就是給記憶體取多個别名;
const int &b = 10; //C++編譯器會為其配置設定記憶體空間;
}
(3)、const在函數後面修飾的本質:void fun(int a) const;
本質:void fun(const Teacher * const this, int a){},就是修飾的是*this;
2、引用的本質
引用的本質:引用在C++中的内部實作是一個常指針;C++編譯器幫我們程式員取了一個位址;
Type &name <===> Type * const name;
(1)、代碼如下:
#include<iostream>
using namespace std;
struct Teacher{
char name[64];
int age;
int &a; //很像指針所占用的記憶體空間大小;
int &b;
};
//普通引用占記憶體空間,和指針所占空間大小是一樣的;
//引用的本質:引用在C++中的内部實作是一個常指針;C++編譯器幫我們程式員取了一個位址;
// Type &name <===> Type * const name;
int main(void){
cout<<sizeof(Teacher)<<endl;
return 0;
}
//一般int傳回,傳回的是變量的值;
//一般int &,引用傳回的是變量本身;函數可放左邊/右邊;
//用引用作為傳回值的話,其傳回的空間不能是臨時空間;
//g2() = 100; 可以作為左值,因為引用傳回的是一段連續的存儲空間,是變量;
//函數作左值,必須傳回一個引用;
(2)、運作結果:
原因:因為我用的是64位的,是以指針8位元組,還有位元組對齊,是其中最大基礎資料類型位元組的整數倍,此處應該為8的整數倍;
3、C++的内聯函數
(1)、内聯函數必須和函數體的實作寫在一塊;
(2)、内聯函數直接将函數體插入在函數調用的地方;
(3)、内聯函數速度更快,沒有壓棧,調轉,傳回等額外開銷;
(4)、内聯函數中不能有循環語句,不能存在過多的條件判斷語句;
(5)、内聯函數隻是一種請求,C++編譯器不一定允許這種請求;
#include<iostream>
using namespace std;
inline void printA(){ //内聯函數讓C++做特殊處理;
int a = 10;
cout<<"a = "<<a<<endl;
}
//内聯函數替代宏代碼片段; inline
int main(void){
printA();
return 0;
}
4、C++中的預設參數
#include<iostream>
using namespace std;
//沒傳參數,就使用預設參數;
int printfA(int a = 1){
cout<<a<<endl;
}
int printfA_1(int a, int b, int c = 1){}
//C++中允許函數有預設參數
//預設參數規則:從左邊開始,如果預設參數出現,那麼接下來的(右邊)都必須是預設參數;
int printA_2(int a = 1, int b = 2, int c){}
int main(void){
printfA();
return 0;
}
預設參數規則:從左邊開始,如果預設參數出現,那麼接下來的(右邊)都必須是預設參數,否則報錯!!
5、占位參數和預設參數
#include<iostream>
using namespace std;
//函數占位參數:函數調用時,必須寫夠參數;
void func1(int a, int b, int){
cout<<"a "<<a<<" b "<<b<<endl;
}
//預設參數和占位參數
//目的:為以後的程式留下擴充;
void func2(int a, int b, int = 0){ //這個函數既是預設參數,也是占位參數;
cout<<"a "<<a<<" b "<<b<<endl;
}
int main(void){
//func1(1, 2); 占位參數此時必須為3個,是以錯誤;
//func1(1, 2, 3); 對
func2(1, 2); //占位和預設參數,2/3個參數都是可以的;
func2(1, 2, 3);//此時第3個參數沒有什麼意思,不能使用;
return 0;
}