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

栏目: C++ · 发布时间: 5年前

1.参数传递

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

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

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

2)引用作为参数的特点:

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

b.使用引用传递函数的参数,在内存中并没有产生实参的副本,他是直接对实参操作。而使用一般变量传递函数的参数,当发生函数调用时需要给参数分配存储单元,形参变量是实参变量的副本。如果传递的是对象,还将调用拷贝构造函数。所以传输数据较大时,使用引用比一般变量传递参数的效率和所占空间都好。

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

2.内联函数

内联函数,一般用inline修饰。

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

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

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

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

3.默认参数

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

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

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

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


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Ajax模式与最佳实践

Ajax模式与最佳实践

Christian Gross / 李锟、张祖良、蔡毅、赵泽欣 / 电子工业出版社 / 2007-3 / 49.80元

Ajax 正在将我们带入到下一代的网络应用中。 本书深入探讨了动态的网络应用,将Ajax和REST集成在一起作为单独的解决方案。一个很大的优势是,与Ajax相似,REST可以和现今存在的技术一起使用。现在上百万的客户端计算机都是基于Ajax的,上百万的服务器是基于REST的。   无论你是否已经开发过Ajax应用程序,这都是一本理想的书。因为这本书描述了各种各样的模式和最好的实践经验。通过此......一起来看看 《Ajax模式与最佳实践》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具