1、使用内联函数的措施:
(1)、在函数声明前加上关键字inline;
(2)、在函数定义前加上关键字inline;
通常的做法是省略原型,将整个定义(即函数头和函数代码)放在本应该提供原型的地方。
2、C++新增的一种复合类型--引用变量。引用是已定义的变量的别名。其主要用途是用作函数的形参(具体的说是结构和对象的参数)。通过将引用变量用作参数,函数将使用原始数据,而不是其副本。
3、必须在声明引用时将其初始化,而不能像指针那样,先声明,再赋值。
4、如果实参与引用参数不匹配,C++将生成临时变量。当前,仅当参数为const引用时,C++才允许这样做。具体情况如下:
(1)、实参的类型正确,但不是左值(左值参数是可以被引用的数据对象);
(2)、实参的类型不正确,但是可以转换为正确的类型。
5、将引用参数声明为常量数据的引用的理由有三个:
(1)、使用const可以避免无意中修改数据的编程错误;
(2)、使用const使函数能够处理const和非const实参,否则将只能接受非const数据;
(3)、使用const引用使函数能够正确生成并使用临时变量;
6、传统返回机制与按值传递函数参数类似:计算关键字return后面的表达式,并将结果返回给调用函数。从概念上说,这个值被复制到一个临时位置,而调用程序将使用这个值。
7、返回引用的函数实际上是被引用的变量的别名。
8、返回引用时最重要的一点是,应避免返回函数终止时不再存在的内存单元引用。为避免这一问题,再简单的方法是,返回一个作为参数传递给函数的引用。另一种方法是用new来分配新的存储空间。
9、将类对象传递给函数时,C++通常的做法是使用引用。
10、什么时候应使用引用,什么时候应使用指针,什么时候应按值传递,下面是一些指导:
对于使用传递的值而不作修改的函数:
(1)、如果数据对象很小,如内置数据类型或小型结构,则按值传递。
(2)、如果数据对象是数组,则使用指针,因为这是唯一的选择,并将指针声明为指向const的指针。
(3)、如果数据对象是较大的结构,则使用const指针或const引用,以提高程序的效率。这样可以节省复制结构所需的时间和空间。
(4)、如果数据对象是类对象,则使用const引用。类设计的语义常常要求使用引用,这是C++新增这项特性的主要原因。因此,传递类对象参数的标准方式是按引用传递。
对于修改调用函数中数据的函数:
(1)、如果数据对象是内置数据类型,则使用指针。如果看到诸如fixit(&x)这样的代码(其中x是int),则很明显,该函数将修改x。
(2)、如果数据对象是数组,则只能使用指针。
(3)、如果数据对象是结构,则使用引用或指针。
(4)、如果数据对象是类对象,则使用引用。
11、对于带参数列表的函数,必须从右向左添加默认值。实参按从左到右的顺序依次被赋给相应的形参,而不能跳过任何参数。
12、虽然函数重载很吸引人,但不要滥用。仅当函数基本上执行相同任务,但使用不同形式的数据时,才应采用函数重载。
13、函数模板并不创建任何函数,而只是告诉编译器如何定义函数。
14、如果需要多个将同一种算法用于不同类型的函数,请使用函数模板。如果不考虑向后兼容的问题,并愿意键入较长的单词,则声明类型参数时,应使用关键字typename而不使用class.
15、第三代具体化标准:
(1)、对于给定的函数名,可以有非模板函数,模板函数和显示具体化模板函数以及他们的重载版本;
(2)、显示具体化的原型和定义应以template<>打头,并通过名称来指定类型;
(3)、具体化优先于常规模板,而非模板函数优先于具体化和常规模板;
16、理解术语实例化和具体化:
在代码中包含函数模板并不会生成函数定义,它只是一个用于生成函数定义的方案。编译器使用模板为特定类型生成函数定义时,得到的是模板实例。