使用引用形參須要注意的問題

先看下面這段代碼:ios

int incr(int& val){
    return ++val;
}

int main(){
    short v1=1;
    const int v2=10;
    int v3=20;
    incr(v1);  //錯誤:v1不是int
    incr(v2); //錯誤:v2是const
    incr(v3); //正確
    incr(10); //引用類型的參數不能是常量
}

調用非const類型的引用形參,實參必須是非const類型的,並且實參的類型和形參的類型必須徹底相同。注意這裏是徹底相同,short也不能代替int,int也不能代替short.ide

當調用一個const引用的形參函數時,若是實參不是一個變量或者該類型不匹配,函數會建立一個無名的臨時變量用來存儲實參的值,並把這個形參做爲該臨時變量的引用。示例代碼以下:函數

#include<iostream>
using namespace std;

double refcube(const double &ra);

int main(){
    double side1=12.0;
    int side2=6;
    double c5=refcube(side2);  //實參和形參不匹配,可是能夠轉換成正確的類型。
    cout<<c5<<endl;           
    double c6=refcube(7.0);     //實參和形參匹配,可是不是左值。
    cout<<c6<<endl;
        
    double c7=refcube(side1+10.0);  //實參和形參匹配,但不是左值。
    cout<<c7<<endl;

    double  c8=refcube(side2+4);  //實參和形參不匹配,可是能夠轉換成正確的類型,並且不是左值。
    cout<<c8<<endl;
}

double refcube(const double& ra){
    return ra*ra*ra;
}

注意:這種生成臨時變量必須是要以const引用爲前提,若是函數爲double refcube(double&ra),則上述程序沒法運行。spa

相關文章
相關標籤/搜索