《C++Primer Plus》学习笔记(七)

来源:互联网 发布:java 字符串查找 编辑:程序博客网 时间:2024/06/11 03:04

1、C++内联函数

1、C++内联函数的编译代码与其他程序代码“内联”起来了。也就是说,编译器将使用相应的函数代码替换函数调用。对于内联函数,程序无需跳到另一个位置处执行代码,然后再跳回来。因此,函数的运行速度比常规函数稍快,但代价是需要更多的内存。如果函数在10个不同的地方调用同一个内联函数,则该程序将包含该函数10个代码拷贝。

2、操作如下:

1、函数声明前加上inline;

2、函数定义前加上inline;

3、通常的做法是省略原型,将整个定义(即函数头和所有函数代码)放在本应提供原型的地方。(编译器不一定满足请求)。

内联函数不能递归。

4、inline double square(double x){ return  x*x; }函数不应过大


2、引用变量

1、int rats;       int & rodents = rats;    

上述引用声明允许rats与rodents互换,它们指向相同的值和内存单元

2、引用于指针的区别。

1、声明引用时进行初始化。Int & robent;   robent = rat;  //wrong 

2、不能改变引用对象,否则原来的对象也会被更改。

Int rats = 100;

Int bunies = 50;

Int & robent = rats;

robent = bunies; ------------robent = rats = 50; //rats也变

3、如果实参与引用参数不匹配,C++将生成临时变量。仅当参数为const引用时,C++才允许这样做。

Double refcube( const double &ra); 一下情况将生成临时变量:

1、Long edge; Double c1 = refcube( edge ); //类型不对

2、Double c2 = refcube( 7.0 ); //类型对,但没有名称,下例也是

3、doubel side = 10.0; Double c3 = refcube( side + 10.0);

这些情况下,编译器将生成一个临时匿名变量,并让ra指向它,这些临时变量,只在函数调用期间存在,此后编译器可以随意的删除。

3、将引用用于结构

避免返回当函数终止时不在存在的内存单元引用(如函数中定义的结构体)。解决方法有:

1、返回一个作为参数传递给函数的引用。

2、使用new 分配内存。


3、默认参数

默认参数值的是当函数调用中省略了实参时自动使用的一个值。

对于带参数列表的函数,必须从右向左添加默认值,实参按从左到右赋值。


4、函数重载

函数重载的关键是函数的参数列表——也称为函数特征标。 而不是取决于函数类型。

C++如何跟踪每一个重载函数呢?

答:使用C++开发工具中的编译器编写和编译函数时,C++编译器将执行一些神奇的操作——名称修饰 或 名称矫正,它根据函数原型中指定的形参类型对每个函数名进行加密。



                                                                                               ——————————2012年7月14日20:36:54