C++const類型的引用參數

來源:互聯網
上載者:User

標籤:ring   自動   const   add   c++   image   參數不匹配   情況   font   

  • string類定義了一種char*到string的轉換功能,這使得可以使用C-風格字串來初始化string對象。
  • 類型為const引用的形參其中一個屬性工作表明:假設實參的參數類型與引用參數不匹配,但可以轉換為參考型別,程式將建立一個正確類型的臨時變數,使用轉換後的實參值來初始化它,然後傳遞一個指向該臨時變數的引用。
  • 上面提到const引用為形參的屬性,也就是說,如果引用的參數是const,則編譯器在某些情況下會產生臨時變數,比如下面這兩種情況:
    1, 實參類型不正確,但可以轉換為正確類型。
    2, 實參類型正確,但不是左值
先看到下面例子
void g(string &a,const string &b){    cout<<"a address :"<<&a<<endl;    cout<<"b address :"<<&b<<endl;    //    return a; }string f(){}int main(){    string input="I love you";    int a=1; //   int b=2;    cout<< "input address: "<<&input<<endl;    const char *b="***";    cout<<"b address: "<<&b<<endl;        g(input,b);    //    g(input,input);        getchar();return 0;}

可以看到g函數的參數一個為string& 一個為 const string&

我們將input="I love you"和const char *b="***";作為參數傳入g函數,分別列印傳入前和傳入後變數的地址我們來看一下結果。

可以看到將字串常量傳給g函數的const string&參數列印出的地址與傳入的地址不同,這說明函數自動產生了一個臨時變數將字串常量自動轉化為string類型。

 

 

那我們再看另一個例子
1 string f();2 string g(string & str);3 4  g(f());5  g("abc");

程式編譯在4,5行出錯,這是為什麼呢。

第5行的錯誤可以由上面的例子解釋,當引用參數與實參不匹配,但可以通過轉化為參考型別時,要將引用聲明為const。

第4行的錯誤可以知道,將一個臨時變數作為實參傳遞給參數時,也同樣需要將參數類型設為const。

 

 

 

以上是針對string類型的參數做的實驗,那麼其他類型的參數是不是也同樣是這樣的規則呢?

 

 1 void g(int &a,const char &b) 2 { 3     cout<<"a address :"<<&a<<endl; 4     cout<<"b address :"<<&b<<endl; 5      6 //    return a;  7 } 8  9 string f()10 {11 }12 int main()13 {14 15     int a=1;16     int b=2;17     cout<< "a address: "<<&a<<endl;18     cout<<"b address: "<<&b<<endl;19     20     g(a,b);21     22 //    g(input,input);23     24     getchar();25 return 0;26 }

我們將參數參數改為int& 和 const char&引用,將兩個整形變數傳遞給函數。發現結果和上面一樣,同樣產生了臨時變數。

 

總結

在c++中當函數參數為引用時。

  • 如果傳遞的實參與函數參數類型不符,那麼只有將參數類型定義為const,那函數將會產生一個臨時變數,臨時變數自動轉化為函數參數類型。否者將報錯。
  • 如果傳遞的實參是一個臨時變數,那麼就要將函數參數定義為const類型,否則也會出錯

 

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.