C++中特别的函数和变量

原创 2016年05月31日 21:34:47
 内联函数

(1)      内联函数是C++为提高程序运行速度所做的一项改进。

(2)      内联函数的编译代码与其他程序代码“内联”起来了,也就是说,编译器将使用相应的函数代码替代函数调用。

(3)      内联函数的运行速度比常规函数稍快,但代价是需要占用更多内存。比如,如果程序在10个不同地方调用同一个内联函数,则该程序将包含该函数代码的10个副本。

(4)      使用内联函数这项特性,必须在函数声明前加上关键字inline或在函数定义前加上关键字inline。但通常的做法是将整个定义放在本应提供原型的地方。(在函数首次使用前出现的整个函数定义充当了原型。)

(5)      程序员请求将函数作为内联函数时,编译器并不一定会满足这种要求,它可能认为该函数过大或注意到函数调用了自己。

(6)      内联函数这种特性,在C语言中存在类似的特性,C语言使用预处理器语句#define来提供宏(宏,是内联代码的原始实现。)。内联和宏的区别:宏只是通过文本替换来实现,所以,不能实现按值传递;而内联可以按值传递。

如下宏:

#define SQUARE(X) (X)*(X)

调用:a = SQUARE(5.0);  b =SQUARE(4.5+7.5);  d = SQUARE(c++);//会将c递增两次。


引用变量

C++新增了一种复合类型,引用变量。引用是已定义的变量的别名(另一个名称)。

(1)      引用变量的主要用途是用作函数的形参。通过将引用变量用作参数,函数将使用原始数据,而不是其副本。因此,除指针之外,引用也为函数处理大型结构提供了一种非常方便的途径。

(2)      就像声明中的char*指的是指向char的指针一样,int&指的是指向int的引用。

int rats;

int& rodents = rats;

int& doo = redents;

上述三个rats、rodents和doo可以互换使用,因为它们指向相同的值和内存单元。如果通过取地址符&对三者操作,它们的地址是一样的。

(3)      必须在声明引用时将其初始化,而不能像指针那样,先声明,再赋值。于是,引用更接近const指针,必须在创建时进行初始化,一旦与某个变量关联起来,就将一直效忠于它。

int& rodents = rats;

int * const pr = &rats;

其中,引用rodents扮演的角色与表达式*pr相同。

(4)      引用作为函数参数应该注意的地方:

a.      比如,double x = 3.0;

函数原型 double refcube(double &ra);

函数调用 double z =refcube(x + 3.0);

在有些较老的编译器会勉强通过,但会发出警告。在较老的编译器是这样对待的:程序创建一个double类型的临时无名变量,它的值是表达式x+3.0的值,然后,ra将成为该临时变量的引用。

在现代C++中,上述调用时错误的,通过不了编译。原因是表达式x+3.0并不是变量,例如,不能对表达式赋值,如:x+3.0 = 5.0 。也就是说,它不是左值。

b.      当且仅当函数参数为const引用时,当实参与引用参数不匹配但可以转换为正确的类型,或者实参与引用参数匹配但不是左值,C++允许生成临时变量。

c.       实际上,对于形参为const引用的C++函数,如果实参不匹配,则其行为类似于按值传递(确保原始数据不被修改,将使用临时变量来存储值)。


版权声明:本文为博主原创文章,未经博主允许不得转载。

C/C++中判断两个变量是否相等,相减是否为0、大于0或小于0时要特别注意机器误差带来的影响!

C/C++中判断两个变量是否相等,相减是否为0、大于0或小于0时要特别注意机器误差带来的影响!否则程序不会按你预想的那样执行!...

lua调用C++函数崩溃时,查看lua的调用栈信息 (特别适用于tolua++)

cocos2d-x这个开源引擎目前在移动开发领域挺火,我用了一阵子,非常喜欢它的lua绑定,一旦理解了其工作机制,用起来相比C++有不同的感受。         但是想要用好lua脚本,实在不是件容...
  • mayao11
  • mayao11
  • 2012年12月06日 23:39
  • 8784

lua调用C++函数崩溃时,查看lua的调用栈信息(特别适用于tolua++)

cocos2d-x这个开源引擎目前在移动开发领域挺火,我用了一阵子,非常喜欢它的lua绑定,一旦理解了其工作机制,用起来相比C++有不同的感受。         但是想要用好lua脚本,实在不是件容...
  • cbbbc
  • cbbbc
  • 2015年04月29日 16:23
  • 954

lua调用C++函数崩溃时,查看lua的调用栈信息 (特别适用于tolua++)

cocos2d-x这个开源引擎目前在移动开发领域挺火,我用了一阵子,非常喜欢它的lua绑定,一旦理解了其工作机制,用起来相比C++有不同的感受。         但是想要用好lua脚本,实在不是...

C++静态成员变量和静态成员函数使用总结

C++静态成员变量和静态成员函数使用总结: 一.静态成员变量:          类体中的数据成员的声明前加上static关键字,该数据成员就成为了该类的静态数据成员。和其他数据成员一样,静态数据成员...

C++卷积神经网络实例:tiny_cnn代码详解(4)——convolutional_layer类结构信息之成员变量与构造函数

在之前的博文中我们已经对tiny_cnn框架的整体类结构做了大致分析,阐明了各个类之间的继承依赖关系,在接下来的几篇博文中我们将分别对各个类进行更为详细的分析,明确其内部具体功能实现。在这篇博文中着重...

C/C++读取Lua中的变量及调用Lua函数

config.luaprint('--In Lua--')local a = -10 print('--math.abs(a)--',math.abs(a))width = 1080 height =...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++中特别的函数和变量
举报原因:
原因补充:

(最多只允许输入30个字)