峰中劲草

知识在于积累,人生在于沉淀~

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

 内联函数

(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++函数,如果实参不匹配,则其行为类似于按值传递(确保原始数据不被修改,将使用临时变量来存储值)。


阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_24059821/article/details/51549354
个人分类: C++
上一篇经典算法心得
下一篇《Effective C++》学习总结
想对作者说点什么? 我来说一句

eqrweferewrwtrew

2008年11月28日 110KB 下载

fwet3qt34t3t34

2008年11月28日 4KB 下载

没有更多推荐了,返回首页

关闭
关闭