歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C++中函數傳參相關問題

C++中函數傳參相關問題

日期:2017/3/1 10:03:18   编辑:Linux編程

函數形參的問題:銘記一條----傳參最好傳引用,指針或者迭代器

引用:
c程序員習慣傳遞指針實現對實參的訪問,比如swap函數,但c++程序員一般會使用引用!
引用的好處:避免復制!
應該將不需要修改的引用形參定義為const引用,普通的非const引用形參在使用時不太靈活,不可以用const對象初始化,比如“afasdf”不能初始化string&型的形參;
通常,函數不應該有vector或其他容器類型的形參,最好使用引用;更為牛叉的是傳遞容器中需要處理的元素的迭代器

引用與指針:

指針傳參和引用傳參的區別,以swap為例:
指針傳參,復制了指針,改變的是指針指向的值(有復制過程)
引用傳參,沒有復制,直接改變參數的值(木有復制過程)

int* a;
a-->int數,a可以看成一個地址,a地址裡面存的就是a的值

int a=0;
&a就是0的地址(取地址),&a相當於int*指針

傳數組:

一維數組傳參的兩種方法,以保證程序安全:
1.傳指針,用指針指定指針邊界,類似於傳vector的迭代器一樣
例如:void printValues(const int *begin,const int*end) //調用時,printValues(a,a+10)
2.顯示傳遞數組大小
例如:void printValues(const int a[],size_t size)

多維數組的傳參:

void printValues(int (matrix*)[10],int rowSize)
void printValues(int matrix[][10],introwSize) //要預先定義第一維的每個元素都是包括10個int的指針

main函數傳參:
int main(int argc,char *argv[])
int main(int argc,char **argv)

函數的返回值:
函數傳參和返回時,類型必須相同,或者能隱式轉換為目標值
函數返回值是引用的時候,千萬不能返回局部對象的引用,因為局部對象會在函數執行完後釋放

函數的聲明:
一種好的方式是在頭文件中提供函數聲明

默認實參:
函數聲明和函數定義中都可以指定默認實參,但是通常應在函數聲明中指定默認實參,並將該聲明放在合適的頭文件中。
默認實參只能用來替換函數調用缺少的尾部實參,所以寫函數排列形參的時候,最好使最少使用默認實參的形參排在最前,最可能使用默認實參的形參排在最後

Copyright © Linux教程網 All Rights Reserved