例子解析C++的引用,傳參,const的相關特點

爍GG發表於2015-03-25
/*-----------------------------------------
引用是被引用者的別名,本身不佔記憶體,主要功能用於傳參,
 其免複製特性使得用函式時減少記憶體消耗並提高速度;
 引用和"&的取地址"是完全兩回事!
 ---------------------------------------------*/
#include <iostream>
#include <stddef.h>
using namespace std;
class A
{
public:
    int a;	//4個位元組
    int b;	//4個位元組
};


void change1(const A &gg) //(還可以寫成(const A& gg))
{
 // gg.a+=10;  //const的作用就是,引用無法修改原物件.所以這兩句會報錯
 // gg.b+=33;  //相當於const將引用變為只讀
    cout<<gg.a<<" "; //就算有const,不能改動,但能讀
    cout<<sizeof(gg); //引用只是被引用者的別名,此處輸出8
}
void change2(A gg)//普通傳參
{
    gg.a+=10;
    gg.b+=33;
}
void change3(A& gg)//引用傳參
{
    gg.a+=10;
    gg.b+=33;
}


int main()
{
    A shuogg;
    shuogg.a=0;
    shuogg.b=0;
    cout<<sizeof(shuogg);//輸出:8 (說明shuogg不是指標,而是一個大資料塊)
    change1(shuogg);    //輸出:0 8(說明引用也不是指標,而是shuogg的別名)
    change2(shuogg);//此函式就是先複製一份shuogg到gg,執行完函式後釋放,無法修改shuogg的a,b值
    cout<<shuogg.a<<" "<<shuogg.b<<" ";//輸出:0 0
    change3(shuogg);//引用傳參不會複製的,功能和指標相似,故函式結束可以改動shuogg
    cout<<shuogg.a<<" "<<shuogg.b<<" ";//輸出:10 33
    return 0;
}


相關文章