C++在函数这方面相较于C语言有许多不同的新特点:
本章节重点就在于:内联函数、按值引用传递变量、默认的参数值、函数重载、模板函数
1、内联函数
内联函数的定义:内联函数的编译代码与其他程序代码“内联”了起来,编译器将会使用相应的函数代码来代替函数调用,对于内联函数,程序将不会调用它,而是使用相应的代码去代替它,使得程序执行速度更快。
内联函数的使用:
在函数生目前加上关键字 inline
在函数定义前加上关键字 inline
#include<iostream>
using namespace std;
inline double square(double x){
return x*x;
}
熟悉C语言的应该可以想到C语言的宏定义,其实宏定义就是内联函数的原始实现。
2、引用变量
引用是已定义变量的别名。
引用变量的主要用途是用作函数的形参,通过将引用变量用作参数,函数将使用原始数据,而不是其副本。
C++与C语言使用 & 来指示变量的地址
但是在C++中也可以将其用来声明引用。
int rats;
int &redens = rats; //rats的别名就是redens
rats与redens都指向相同的值和地址单元。
引用似乎与指针非常的相似,实际上他们也有以下不同之处。指针可以先声明后面再给其赋值,但是引用必须在声明的同时给其赋值,同时,它所指向的对象也不能更改。引用更接近于const指针。
int &rodens = rats;
int *const pr = &rats;
将引用用于结构和类是更加合适的,引入引用主要就是为了这些类型的,而不是基本的内置类型。
struct free_throws{
int make;
double atemp;
}
void set_pc(free_throws &ft);
//如果不希望函数修改结构内的值
void display(const free_throws &ft);
函数返回值引用
与返回值不同的是,返回引用可以作为赋值运算符的左值并且返回引用不能返回局部变量。
#include<iostream>
using namespace std;
int& func(int& sum)
{
return sum;
}
int main()
{
int a = 3; //定义变量a=3
int& ra = func(a); //定义引用ra,ra是func(a)返回值的别名
cout << "func(a)=" << func(a) << endl;
cout << "ra=" << ra << endl; //在控制台中显示func(a)和ra的值
func(a) = 5; //修改func(a)的返回值
cout << "func(a)=" << func(a) << endl;
cout << "ra=" << ra << endl; //在控制台中显示func(a)和ra的值
return 0;
}
为何将const用于引用返回类型?
const 作为函数返回类型,最终目的是希望调用函数时将返回值作为常量处理
函数返回为引用时,如果不想修改函数调用后的值,则用const &。 函数返回值引用常量表示不能将函数调用表达式作为左值使用。
3、默认参数
默认参数指的是函数调用时省略了实参时自动使用的一个值。
1.c++规定默认参数必须从函数参数的右边向左边使用
对于带参数列表的函数,必须从右向左添加默认值,也就是说如果要为一个参数添加默认值
2.默认参数不能在声明和定义中同时出现
4、函数重载
函数重载的关键在于函数的参数列表
函数的重载的条件:
1:函数名相同
2:函数的参数列表不同:参数数量、参数数据类型不同。
注意:函数的返回值类型可以不同,但是特征标也必须不同。