C++学习笔记(七)函数探幽

与普通函数调用区别:

普通函数调用:

在调用时,先储存当前指令的地址,并将参数保存到堆栈(内存块),再跳到函数标记的起点,执行函数代码,然后跳回到标记点.来回跳跃位置意味着使用函数需要一定的开销.

内联函数:

内联函数相当于把函数内容复制到被调用的地方,这样就可以不用跳跃位置,因为内联函数比普通函数执行的速度要快,但是代价是要更多的内存,比如要调用10,就要复制10个代码拷贝.所以应该有选择性的选择内联函数

什么时候使用内联函数:

  如果执行代码的时间比处理函数调用机理长,则节省的时间只占整个过程非常小的一部分.如果执行代码时间非常短,则可以节省很大一部分时间.另一方面由于调用的时间非常的,所以节省的绝对值并不大,除非该函数经常被调用.

声明内联函数:

          在函数声明前加关键字:inline

          在函数定义前加关键之:inline

可以省略原型,将整个定义(即函数头和所有函数代码)放在本应该提供原型的地方

注意:程序员请求将函数作为内联函数时,编译器并不一定会满足这种要求.它可能认为该函数过大或注意到函数调用了自己(内联函数不能递归),因此不将其作为内联函数.

引用变量:

           引用变量是为已定义的变量起一个别名,主要作用是在调用函数时作为参数,这样函数就能够改变变量的值.

创建引用变量:

           int rat;

Int & crat=rat;

上面声明允许吧crat和rat的位置互换,他们指向相同的值和内存单元。

使用:

cout<<crat;

与指针的区别:

除了表示方法不同外,最明显的差别就是引用必须再声明时就赋值。只能通过初始化来设置引用,不能通过赋值来设置

将引用变量作为参数:

声明函数时参数应为引用变量,定义时也使用引用变量。

通过设置了引用变量,在函数中改变其值外部的值也跟着改变。

将结构用于引用:

和普通变量的使用方法一样,不过结构引用在读取成员时还是用点(.)操作符,而不是->操作符

将引用用于返回值:

当将返回值也用引用时,就不需要再创建变量了。需要注意的是当函数运行完成时,其中的变量也会跟着失效,所以如果使用引用返回值,那么返回的变量不能是在函数中创建的。如果需要创建变量,则有new 关键字创建,最后返回创建变量的地址指针,注意:使用new创建的变量在不使用时必须用delete释放空间。

默认参数:

设置默认参数后,当调用函数时未能给出参数时,函数则以默认参数调用.sum()函数默认的参数是2,那么sum();sum(2)和等效的。

声明默认参数:

只需在函数原型处给参数赋值就行了,如:

void sum(int a=2);

函数重载:

根据参数不同而调用同一个函数,能够拥有多个重名不同参数的函数,就是函数重载。注意:重载是指不同的参数及类型.但是不包括引用,如果sum(int a)sum(int & a),调用时sum(a);因为调用时可能产生二意性(参数aint,int &都匹配),所以编译时不通过的。重载与参数是否是const无关

什么时候使用重载函数:

当函数基本实现相同的功能,但数据不同时就可以选择使用重载函数。

函数模块:

使用通用类型来定义函数,在使用时可以使用具体类型代替(如intdouble

定义函数模块:

template<class Any>

void swap(Any &a,Any &b)

{

Any temp;

temp=a;

a=b;

b=temp;

}

第一行指出要建立一个模板,并将类型名命名为Any(可以自定义名字),这样当调用时使用int时,Any就可以说是int型的。

函数模块也可以重载

 

发布了38 篇原创文章 · 获赞 21 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/wantnrun/article/details/8789323