C++中的const,引用本質,內聯,預設/佔位參數,

來源:互聯網
上載者:User

標籤: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,引用本質,內聯,預設/佔位參數,

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.