/*-----------------------------------------
引用是被引用者的別名,本身不佔記憶體,主要功能用於傳參,
其免複製特性使得用函式時減少記憶體消耗並提高速度;
引用和"&的取地址"是完全兩回事!
---------------------------------------------*/
#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;
}