天天看點

C++的進階用法

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.      用&|^(與或非)組裝資料

繼續閱讀