Hour 5 Calling Functions

Inline Functions

认识

宏观上看,内联函数就是牺牲程序存储空间换取执行速度,当函数中语句很少的时候,可以得到性能的提升(可以理解为函数调用的时间都足够程序执行的时间了)。

本质为编译器把函数语句整体复制到发生函数调用的地方。

内联函数其实意义并不大,现在的编译器针对程序自动做很多优化。

用法

函数原型处,声明inline即可,函数实现(define)那里不需要,例如

inline int double (int para);

main()
{
        some statements.............
}


int double(int target)
{
        return target*target
}

 

Auto-Typed Return Values

C++ 14的一个特性是可以省函数返回值,例如

auto substract(int x, int y)
{
        return x - y;  
}

  

两个限制:

  1. 若存在多个返回值,则他们必须返回同一类型-------不要让编译器替你做选择
  2. 函数定义必须在函数调用之前

Summary

所有的函数都应该使用函数 prototype 声明,写出

  • 函数名字
  • 参数顺序和类型
  • 返回类型

函数的 overloading 可以实现用同一个名字命名几个功能相似的函数,实际调用时候到底执行哪个呢?

  • 参数数据类型
  • 参数的数目

计算机自己会去匹配

Q&A

Q. 为毛不全用 global variable?

A. 全都用全局变量的话,意味着整个程序都可以访问这个变量了,也就意味着,不知道怎么滴就出错了,有可能打错字之类的都会不小心修改到全局变量,debug的时候会很绝望哒。就算是为了不跟自己较劲,也尽量少用 global varable.

Q.关于函数重载二义性的说明,请看以下两个函数,你不是说同名函数重载只看参数数据类型和参数数目吗?我这俩函数的数目不一样,能重载不?

int findArea(int width, int length =1);
int findArea(int size);

A. 编译会报错, findArea(int ) 这个调用,既可以调用第一个,使用默认参数,也可以调用第二个,你让编译器替你选择,就会产生二义性!!!

 

posted @ 2018-03-14 16:49  一只大公鸡  阅读(111)  评论(0)    收藏  举报