OpendTect
C++中&(引用)進階用法
1. 引用:
别名(類似C中指針),傳址,避免整塊資料壓棧。
int a=34;
int &ra = a;//ra即a的一個别名
cout << "a:" << a<<"\t&a:"<<&a<< "ra:\t";
cout << ra<<"\t &ra:"<<&ra;
void swap(int &p1, int &p2) {
int p; p = p1; p1= p2; p2 = p;
}
int x = 12, y = 21;
cout << x<<"\n"<< y << endl;
2. 常引用:
const 類型 &引用名=目标變量名
常引用不能通過引用對目标變量的值修改,引用安全。
int i;
const int &ri = i;
&ri = 34;//錯誤:表達式必須是可修改的左值
i = 23;
C++臨時變量都是const類型,引用型參數最好定義為const
3. 引用作為傳回值
類型識别符 &函數名(參數){實作}
可以使用流操作符和左值操作符
4. 引用多态
多态的實作一般是靠繼承和接口,父類對子類的引用可以調用子類實作父類的方法。
Define(宏)的進階用法
1. \換行
2. A宏的參數為B宏的字元串時,在B宏前加#
3. A宏的參數為B宏和C宏等以及其他操作時,這些作為參數的宏要用##連結
4. 當宏中有#或者##時宏參數不會展開,需要加一層中間轉換宏
#define X 10
#define cons(a,b) int(a##e##b)
cout << cons(X,X);//錯誤:未定義辨別符XeX
修改為:
#define X 10
#define _cons(a,b) int(a##e##b)
#define cons(a,b) _cons(a,b) //中間轉換宏
cout << cons(X,X);
運算的進階用法
1. 用>><<(位移)代替乘除
2. 用&|^(與或非)組裝資料