引數傳遞的三種方式:
按值傳遞:
#include缺點:記憶體開銷很大。using namespace std;
void swap(int a,int b)
int main()
對於傳遞一般引數:
如果傳遞的參數量過多,例如8000個引數,則需要在棧中複製8000個引數傳遞過去,棧只有2m的空間,這樣的話棧的空間就無法得到充分的利用。
對於傳遞物件:
按址傳遞如果傳遞的是物件的話,傳遞過程中需要複製物件,因此會呼叫複製建構函式,該函式的作用就是建立某個物件的臨時副本。而當函式返回時,傳遞該物件時建立該物件的副本會被刪除,這是會自動呼叫析構函式,而如果返回的仍然是物件的話,並且仍採用按值傳遞的方式,那麼又會呼叫複製建構函式建立乙個物件的臨時複本,當該值成功返回給被呼叫函式時,在呼叫該物件的析構函式刪除臨時拷貝並釋放記憶體。
例如:
#includeusing namespace std;
class a
a(a&)
~a()
};a func(a one)
int main()
按址傳遞:
#include解決了按值傳遞的開銷大的缺點,在傳遞物件時:using namespace std;
void swap(int *a,int *b)
int main()
#includeusing namespace std;
class a
a(a&)
~a()
};a func(a *one)
int main()
減少了一次複製構造和析構:
#include減少了兩次複製構造和析構: 注:using namespace std;
class a
a(a&)
~a()
}; a
*func(a *one)
int main()
按址傳遞物件雖然可以避免重複呼叫複製建構函式和析構函式,但是由於它得到了該物件的記憶體位址,可以隨時修改物件的資料,所以它實際上破壞了按值傳遞的保護機制。用const指標來接收物件可以防止任何試圖對該物件所進行的操作行為,並且保證返回乙個不被修改的物件。
例如:
#includeusing namespace std;
class a
a(a&)
~a()
void set(int i)
int get()const
private:
int x;
};const a*const func(const a *const one)
int main()
按別名傳遞:
#include因為定義引用的別名就是常量,所以不存在更改其的說法。故可以更好的取代按址傳遞物件。using namespace std;
void swap(int &a,int &b)
int main()
例如:#include
using namespace std;
class a
a(a&)
~a()
void set(int i)
int get()const
private:
int x;
};const a& func(const a & one)
int main()
{a a;
a.set(11);
a const &b=func(a);
cout<
Action 引數傳遞的三種方式
qtp提供三種引數傳遞方式 parameter environment datatable parameter 函式傳遞引數 如 分別建立兩個同級別 action outputact 將引數傳遞出來 inputact 獲取 ouputact 傳遞出來的引數 在兩個 action 中設定輸出與輸入引數...
c 引數傳遞的三種方式
在 資料結構與演算法分析 c 描述 第16頁提到了c 中三種不同的引數傳遞方式,分別是 1 按常量引用呼叫 call by constant reference 2 按值呼叫 3 引址呼叫 call by reference 上網查了下資料之後 我還是覺得分成這樣三種更便於理解 1 按值呼叫 形如 ...
函式引數傳遞的三種方式
問題及 1 檔名稱 my first blog.cpp 作 者 林志文 完成日期 2016年9月5日 版 本 號 v1.0 問題描述 交換兩個整型變數的swap函式的三個版本 輸入描述 兩個整數 程式輸出 交換後的兩個整數 includevoid myswap int p1,int p2 void ...