c++中函数的参数传递,内联函数和默认实参的理解

1.参数传递c++

 

1)函数调用时,c++中有三种传递方法:值传递、指针传递、引用传递。函数

给函数传递参数,遵循变量初始化规则。非引用类型的形参一相应的实参的副本初始化。对(非引用)形参的任何修改仅做用域局部副本,并不影响实参自己。优化

为了不传递副本的开销,可将形参指定为引用类型。对引用形参的任何修改会直接影响实参自己。应将不须要修改实参的引用形参定义为const引用。spa

2)引用做为参数的特色:指针

a.传递引用给函数,被掉函数的形参做为原来主调函数中的实参变量或对象的一个别名使用,因此被调函数中对形参变量的操做就是对其相应的目标对象(主调函数)的操做。对象

b.使用引用传递函数的参数,在内存中并无产生实参的副本,他是直接对实参操做。而使用通常变量传递函数的参数,当发生函数调用时须要给参数分配存储单元,形参变量是实参变量的副本。若是传递的是对象,还将调用拷贝构造函数。因此传输数据较大时,使用引用比通常变量传递参数的效率和所占空间都好。递归

c.使用指针做为函数的参数能达到引用的效果,可是,在被调用函数中一样要给形参分配存储单元,且须要重复使用“*指针变量名”的形式进行运算,容易产生错误且阅读性较差。另外一f方面,在主调函数的调用点处,必须用变量的地址做为实参,而引用更加容易使用,清晰。内存

2.内联函数作用域

内联函数,通常用inline修饰。编译器

1)成员函数称为内联。在类中成员函数所有默认为内联函数。在类中声明的成员函数若是加了inline,则其为内联函数,若是没有加inline,在类外定义该成员函数时加了inline,该成员函数也为内联函数。

2)普通函数称为内联函数。在普通函数的定义或申明前加inline使其成为内联函数。一般编译时,调用内联函数的地方,将不进行函数调用,而是使用函数体替换调用处的函数名。

形式相似宏替换(内联扩展)

3)内联机制适用于优化小的,只有几行并且常常被调用的函数(大多数编译器支持 递归函数的内联)

3.默认参数

1)默认参数只在函数声明中设定一次。只有在无函数声明时,才能够在函数定义中设定。

2)默认参数的顺序自右向左,即一个参数设定了默认值时,其右边的参数都要有默认值

3)默认参数调用时,遵循参数调用顺序,自左向右逐个调用(与第2点分清楚)

4).宏定义和内联函数的区别:宏定义是在预处理阶段进行代码替换,而内联函数是在编译阶段插入代码。宏定义没有类型检查,内联函数有类型检查。

相关文章
相关标签/搜索