1.傳值參數
#include "stdafx.h"
#include <iostream>
void Add(int a, int b, int sum)
{
sum = a + b;
}
int _tmain(int argc, _TCHAR* argv[])
{
int a = 1;
int b = 2;
int sum = 0;
Add(a, b, sum);
std::cout << "sum is: " << sum << std::endl;
return 0;
}
輸出結果:sum is: 0
運作時實際參數的值将在Add函數執行之前 複制 給形式參數,如果實際參數與形式參數的資料類型不一緻,必須進行資料類型轉換,函數運作結束時,形式參數所屬的資料類型的析構函數會釋放該形式參數,形式參數的值不會複制到對應的實際參數中,是以不會改變實際參數的值。
可以了解函數運作時形式參數隻是實際參數的一個拷貝。
2.引用參數
#include "stdafx.h"
#include <iostream>
void Add(int &a, int &b, int &sum)
{
sum = a + b;
}
int _tmain(int argc, _TCHAR* argv[])
{
int a = 1;
int b = 2;
int sum = 0;
Add(a, b, sum);
std::cout << "sum is: " << sum << std::endl;
return 0;
}
輸出結果:sum is: 3
傳值參數在函數執行之前要調用形式參數的構造函數,函數運作結束時要調用析構函數,是以會增加程式運作的開銷。而引用參數則不同,在函數調用時并不是複制實際參數的值,而是直接用實際參數來代替形式參數,是以上面這段程式的sum的值應該是3。另外函數傳回時也沒有調用析構函數,是以程式運作時開銷比傳至參數模式小。
3.常量引用參數
#include "stdafx.h"
#include <iostream>
void Add(const int &a, const int &b, int &sum)
{
sum = a + b;
}
int _tmain(int argc, _TCHAR* argv[])
{
int a = 1;
int b = 2;
int sum = 0;
Add(a, b, sum);
std::cout << "sum is: " << sum << std::endl;
return 0;
}
輸出結果:sum is: 3
常量引用模式指出函數不得修改引用參數,在Add函數中,不能對參數a和b進行修改;由于sum的值改變了,是以不能采用常量引用參數。