C++ 内联函数与重载函数、传引用简介

数电老师布置了一个选做的作业(哎,在我们班感觉,选做的加分作业也是必做的作业),时间限制没有讲,就是分析一个开源的软件的c++源代码,有点头疼,于是需要继续补C++了。

函数调用的时候,系统首先保存主调函数的相关信息,再将控制转入被调函数,这些操作增加了程序的时间开销。C++的内联函数形式可以减少函数调用的额外开销,一些常用的短小的函数适合用内联函数的形式。

举个例子来说,

#include <iostream>
using namespace std;
inline int max(int x,int y,int z)
{
    return ((x>=y)?(>=z?x:z):(y>=z?y:z));
}

void main()
{
    int a,b,c;
    cout<<"entre 3 numbers in here(type:int):"<<endl;
    cin>>a>>b>>c;
    cout<<"Maximum is "<<max(a,b,c)<<endl


}

内联函数之所以能减小额外开销的原因是因为系统在编译程序时候就把内联函数的函数体代码嵌入到相应的相应函数调用的位置成为主调函数的一部分,可以直接执行而不是转换流程控制权,一般我们只把短小的函数写成内联函数。

另外需要注意,内联函数不能有循环和选择语句。

内联函数也必须先定义后调用,而不能先声明函数原型,再调用、定义。

——————————————————————————————————————顺便来康康重载函数

重载函数也是函数的一种特殊情况,c++允许几个功能类似的函数同名,但这些同名函数的形式参数必须不同,我们称这些同名的函数是重载函数。

举个例子来说:

#include <iostream>
using namespace std;

int min(int x,int y)
{ return x<y?x:y ;}

double min(double x, double y)
{return x<y?x:y;}

int main()
{
    ing ia(10),ib(20);
    double da(0.1),db(0.5);
    cout<<"两个整数的最小值是:"<<min(ia,ib)<<endl;
    cout<<"两个实数的最小值是: "<<min(da,db)<<endl
}

建议先说明,再使用,并且不应该把完成不同功能的函数写成overloaded functions,破坏程序的可读性。

我们再看一看引用操作,这是最近在写数据结构实验的时候遇到的一个问题,大佬室友给我讲了一下:

//Status是一个返回值类型,在前面说了typedef int Status

//在前面的二级函数表声明:
Status InitSqList(SqList &L,int &);
//。。。后面的和我们要探讨的东西无关


//在调用函数的时候,我们这里简称为一级函数
Status Operation2()
{
    SqList L;
    int count;
    InitSqList(L,count);
    //。。。后面的不重要了
}

//具体说明函数InitSqList的时候,我们这里简称为二级函数
Status InitSqList(SqList& L, int &count)
{
	L.elem = new Book[MAXSIZE];
	if (!L.elem) exit(OVERFLOW);
	L.length = 0;
	Book bk;
	bk.price = 1;
	count = 0;
    //。。。后面的不重要了
}

引用,和指针差不多。我们在一级函数中定义了count来表示这个线性表的行数计数器,按道理说,这个count若直接作为参数传入二级函数的话,我们都知道实参到形参会单向传递,所以这个count并不能在二级函数中得以改变后,返回到一级函数中。所以我们采用了引用的方式,引用可以直接修改一级函数的count的值,减少了我们的工程量。

猜你喜欢

转载自blog.csdn.net/qq_42229034/article/details/83065104