c++中三目運算子可以返回變數本身,那麼c++對三目運算子進行了怎樣的處理?
關於變數名:
變數時一段實際連續儲存空間的別名,
程式中通過變數名來申請並命名儲存空間,
通過變數的名字可以使用儲存空間。
我們考慮一下:對於這一段記憶體,是否只能有乙個別名?
在c++中新增加了引用的概念:
引用可以看做是乙個已經定義變數的別名,
引用的語法: type& name = var;
//c++中的引用
int w = 2;
int & e = w;//e是w的別名,e和w指向同一段記憶體空間;宣告的時候必須用其他的變數初始化
e = 3;//修改e的值,也就修改了w的值
printf("w = %d,e = %d\n",w,e);
printf("w = %08x\n",&w); //
printf("e = %08x\n",&e); //輸出位址一樣
引用的意義:
引用作為其它變數的別名而存在,因此在一些場合可以代替指標
引用相對於指標來說具有更好的可讀性和實用性
swap函式的比較:
swap(int &a, int&b)
int t = a;
a = b;
b = t;
swap(a,b)
swap(int *pa, int *pb)
int t= *pa;
*pa = *pb;
*pb = t;
swap(&a,&b)
注意:引用作為函式引數時不需要進行初始化
const引用:
在c++中可以宣告const引用
const type& name = var;
const引用讓變數擁有唯讀屬性
//const引用
int m = 5;
const int& n = m;
//n = 9;//error const引用讓變數擁有唯讀屬性
int* k = (int*)&n;
*k = 9;
printf("m = %d\n",m);
printf("n = %d\n",n);
注意:使用常量對const引用進行初始化的時候,c++編譯器會為常量值分配空間,並將引用名作為這段空間的別名:
//const引用的初始化
const int &g = 1;//g是乙個唯讀變數
//int g = 2; //不能對g進行複製,說明g是乙個唯讀變數,使用常量對const引用進行初始化將生成乙個唯讀變數
int * l = (int*)&g;
*l = 5;
printf("g = %d\n",g);//g輸出為5
const int g = 1;//g是常量
int * l = (int*)&g;
*l = 5;
printf("g = %d\n",g);//g輸出為1
引用有自己的空間嗎?
struct ref
;printf("ref = %d\n",sizeof(ref));
輸出結果為8
//引用有自己的儲存空間,引用在c++內部實現是乙個常指標,說引用不佔儲存空間,是說引用不會為其指向的某個物件重新分配乙個位址,並不代表引用本身不佔空間
引用在c++中的內部實現是乙個常指標
type& name type* const name
c++編譯器在編譯過程中使用常指標作為引用的內部實現,因此引用所占用的空間大小與指標相同。
從使用的角度,引用會讓人誤會其只是乙個別名,沒有自己的儲存空間。這是c++為了實用性而做出的細節隱藏。
void f(int &a)
等價於:
void f(int * const a)
當函式返回值為引用時
若返回棧變數
• 不能成為其它引用的初始值
• 不能作為左值使用
若返回靜態變數或全域性變數
• 可以成為其他引用的初始值
• 即可作為右值使用,也可作為左值使用
總結:bool型別是c++新增加的基礎型別,其值只能是true和false
c++中的引用可以看作變數的別名來使用
c++中的常引用可以使得乙個變數擁有唯讀屬性
c++中的常引用可以用常量初始化而得到乙個唯讀變數
c++中引用的本質是乙個指標常量
c 學習6 C 中的反射
反射的定義 審查元資料並收集關於它的型別資訊的能力。元資料 編譯以後的最基本資料單元 就是一大堆的表,當編譯程式集或者模組時,編譯器會建立乙個類定義表,乙個字段定義表,和乙個方法定義表等。system.reflection命名空間包含的幾個類,允許你反射 解析 這些元資料表的 system.refl...
C 學習筆記 6 C 記憶體管理
3 堆和棧的區別 4 記憶體的申請和釋放 5 malloc free與new delete 參考資料 內存在程式編譯的時候就已經分配好了,這塊內存在程式的整個執行期間都存在。例如全域性變數,static靜態成員變數 執行函式時,函式內部變數的儲存單元可以在棧上建立,函式執行結束時這些儲存單元自動釋放...
筆記6 C 中的static關鍵字
c 的static有兩種用法 面向過程程式設計中的static和物件導向程式設計中的static。前者應用於普通變數和函式,不涉及類 後者主要說明static在類中的作用。1.面向過程設計中的static 1.1靜態全域性變數 在全域性變數前,加上關鍵字static,該變數就被定義成為乙個靜態全域性...