【C++基础】引用、内联函数、默认参数传递、函数重载和函数模板

C++的语法非常多和繁杂,今天我们先了解一些最基础的语法知识点:引用、内联函数、默认参数传递、函数重载和函数模板这几个方面。

一、引用和引用的参数传递

1.操作引用:&只有在声明引用的时候是引用操作符,其他时候都是地址操作符。

2.引用和变量指向同一个存储单元。

引用一旦初始化,它就维系在一定的目标上,再也不分不开。

3.引用和指针的差别:

指针是一个变量,可以把它再赋值指向别处的地址。

引用在建立的时候必须进行初始化,并且绝对不会再关联其他的变量

Void引用是不合法的。

不能建立引用的数组。

4.没有引用的指针和引用的引用。

5.有空指针,没有空引用。

6.传递指针给函数与传递引用给函数的效果是一样的,

用引用作为函数参数比使用指针有更清晰的语法

7.函数只能返回一个值,如果程序需要从函数返回两个值怎么办?

1)解决这问题的办法之一就是用引用给函数传递两个参数,然后有函数往目标中填入正确的值。

2)函数返回时,要生成一个值的副本。而用引用返回值时,不生成值的副本,所以提高了效率。

8.引用的参数传递需要注意的地方:如果返回不在作用域范围内的变量或对象的引用那就有问题了,这与返回一个局部作用域的指针的性质一样严重。

二、内联函数:

1.函数调用需要建立栈内存环境,进行参数传递,并产生程序的执行转移,这些工作都需要一些时间开销。有些函数的使用频率很高,但是代码却很短。(比较函数,交换函数等等)

2.C++提供了inline函数,减少函数的调用成本。

C语言可以使用宏函数

编译器看到了inline,为该函数创建一段代码,以便在后面每次碰到该函数的调用都用一段代码来进行替换。

3.内联函数的声明:

1)内联函数可以在一开始仅声明一次。

2)内联函数必须在调用之前被声明或定义,因为内联函数的代码必须在被替换之前已经生成被替换的代码。

4.内联函数中,不能使用含有复杂的结构控制语句,如switch和while。如果内联函数有这些语句,则编译将该函数是为普通的函数那样产生函数调用代码。

递归函数(自己调用自己的函数)是不能被用来做内联函数的/

Inline函数大多数限制在小型,被频繁调用的函数上。

5.内联函数与宏定义:

宏定义可以代替小函数定义,但是有缺陷,

宏函数不进行类型检查

最后,我们将内联函数、静态函数和宏函数做一个系统的比较。

 

三、默认参数的函数:

1.调用函数时可以不指定全部参数

2.为可以不指定的参数提供默认值。

 

int add(int x = 5,int y = 6,int z = 3)

 

int main()

{

         add();//所有的这三个参数均采用默认值

         add(1,5);//第三个参数采用默认值

         add(1,2,3);//均不采用默认值

}

3.默认参数的顺序规定:从右向左

四、函数重载:

1.定义:两个以上的函数,取相同的函数名,但是形参的个数或者类型不同,编译器根据实参和形参的类型及个数的最佳匹配,自动确定调用哪一个函数,这就是函数的重载。

2.重载的需要性:

在C语言中,每个函数必须有其唯一的名字:

C++用一种函数命名技术可以准确的判断出应该使用哪个函数

3.匹配重载函数的顺序:

1)寻找一个严格的匹配,如果找到了,就用那个函数。

2)通过内部转换寻求一个匹配,子要找到了,就用那个函数/

3)通过用户定义的转换寻求一个匹配,若能查出有唯一的一组转换,就用那个函数。

4.重载函数的使用说明:

1)编译器不以实参的类型区分重载。

2)编译器不以返回值来区分重载函数

在C语言头文件中的extern”C”

五、函数模板:

1.泛型编程:独立于任何特定类型的方式编写代码。

模板是泛型编程的基础:

模板的使用能够使得程序员能够快速建立具有类型安全的类库集合和函数集合,它的实现,方便了大规模的软件开发。

现有的框架,大都使用了模板,

包括类模板和函数模板

template<类型形式参数列表>返回类型FunctionName(形式参数表)

{

         //函数定义体

}

类型形式参数列表:可以包含基本数据类型,也可以包含类类型。如果是类类型,则须加class。

你可能感兴趣的:(C++)