C++函数参数指南

1.非引用形参

非引用形参表示对对应实参的局部副本,对这类形参的修改仅仅改变了局部副本的值,一旦函数执行完成,这些局部变量的值也就没有了。

1.1 指针形参

该类形参的任何改变也仅仅作用于局部副本,如果函数将新指针值赋给形参,主调函数使用的实参指针的值没有改变。

1.2const形参

如果函数使用非引用的非const 形参,则即可给该函数传递const 实参,也可以传递非const 的实参。

如果函数使用非引用的const 形参,也是既可以给该函数传递const 实参,也可以传递非const 的实参,但是不可以改变实参的局部副本。

注意:尽管函数的形参是const,但编译器却将const 形参被声明为普通类型,如下

void fcn(const int i)就是void fcn(int i)

2.引用形参

作用有以下点:

2.1 使用引用形参可以返回额外的信息

函数只能返回单个值,通过传递引用形参可以改变实参的值,所以对应修改的值进行了改变。

2.2 利用const 引用避免复制

形参作为引用,可以避免被复制,而且形参为const 引用,则函数体不能通过该引用来修改实参。

应该将不需要修改的引用形参定义为const 引用,因为非const 引用形参只能与完全相同类型的非const 对象关联,所以普通的非const 引用形参既不能用const对象初始化,也不能用字面值或者产生右值的表达式实参初始化。

3. 数组形参

因为数组不能复制,所以无法编写使用数组类型形参的函数,但是可以仍可将函数的形参写成数组的形式,如下定义的三种形式是等价的。

void getValue(int*){}

void getValue(int[]){}

void getValue(int[10]){}

注意:当编译器检查数组形参关联的实参时,它只会检查实参是不是指针、指针的类型和数组元素的类型是否匹配,而不会检查数组的长度。

在传递数组时,实参是指向数组第一个元素的指针,形参复制的是这个指针的值,而不是数组元素本身。

通过引用传递数组,编译器检查数组实参的大小与形参的大小是否匹配。

4. 含可变形参的函数

在无法列举出传递给函数的所有实参的类型和数目时,可以使用省略符形参。省略符暂停了类型检查机制。它们的出现告诉编译器,当调用函数时,可以有0个或多个实参,而实参的类型未知。

发布了43 篇原创文章 · 获赞 13 · 访问量 30万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章