標籤:const 內聯 引用本質 預設參數 佔位參數
1、C++中的const
(1)、C++中的const是真正的常量,可以進行數組大小的定義;
代碼如下:
#include<iostream>using namespace std;#define A 10int main(void){ int a = 10; int array[a]; //Linux核心支援這樣定義數組,其他的編譯器不支援 const int a = 10; //這裡是常量,所以可以進行下面的數組大小的確定; int array[a]; //任何平台都是對的,const編譯時間,執行; return 0;}
650) this.width=650;" src="http://s4.51cto.com/wyfs02/M01/8A/AF/wKiom1g3FjfxOSt5AAAoSq71vYA230.png-wh_500x0-wm_3-wmp_4-s_30531414.png" title="QQ20161125003251.png" alt="wKiom1g3FjfxOSt5AAAoSq71vYA230.png-wh_50" />
(2)、C++中常引用時,必定開闢了新的記憶體空間;
代碼如下:
#include<iostream>using namespace std;int main(void){ //int &b = 10; //普通引用,引用一個常量,常量沒有記憶體位址,引用就是給記憶體取多個別名; const int &b = 10; //C++編譯器會為其分配記憶體空間;}
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/8A/AB/wKioL1g3F9Oxpcf1AAAgXXfpYfc261.png-wh_500x0-wm_3-wmp_4-s_1730048027.png" title="QQ20161125003939.png" alt="wKioL1g3F9Oxpcf1AAAgXXfpYfc261.png-wh_50" />
(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)、運行結果:
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/8A/AB/wKioL1g3FubR5pkGAAAuPpNomSY918.png-wh_500x0-wm_3-wmp_4-s_2198243423.png" title="QQ20161125003526.png" alt="wKioL1g3FubR5pkGAAAuPpNomSY918.png-wh_50" />
原因:因為我用的是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;}//內嵌函式替代宏程式碼片段; inlineint main(void){ printA(); return 0;}
4、C++中的預設參數
(1)、代碼如下:
#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;}
(2)、運行結果:
650) this.width=650;" src="http://s5.51cto.com/wyfs02/M00/8A/AB/wKioL1g3GbqgQJi3AAA_ZEcAYrI359.png-wh_500x0-wm_3-wmp_4-s_3537223707.png" title="QQ20161125004735.png" alt="wKioL1g3GbqgQJi3AAA_ZEcAYrI359.png-wh_50" />
預設參數規則:從左邊開始,如果預設參數出現,那麼接下來的(右邊)都必須是預設參數,否則報錯!!
5、佔位參數和預設參數
(1)、代碼如下:
#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;}
本文出自 “wait0804” 部落格,請務必保留此出處http://wait0804.blog.51cto.com/11586096/1876432
C++中的const,引用本質,內聯,預設/佔位參數,