C++ 函数
调用函数
函数的调用完成两项工作,一是用实参初始化形参,二是将控制权转移给被调用函数,此时,主调函数的执行被暂时中断,被调函数开始执行。
当遇到一条return语句时函数结束执行过程,和函数调用一样,return语句也完成两项工作,一返回return语句中的值(如果有的话),二将控制权从被调用函数转移回主函数。
函数的返回值
函数的返回类型不可以是函数或者数组类型,但是可以是指向数组或者函数的指针,这点我们后面会说到。
局部对象
作用域:名字的作用域是程序文本的一部分,名字在其中可见。
生命周期:对象的生命周期是程序执行过程中该对象存在的一段时间。
形参和函数体内部定义的变量统称为局部变量,他们对函数而言是“内部”的,同时局部变量还会“隐藏”在外层作用域中同名的其他所有声明。
在所有函数体之外定义的对象存在于程序的整个执行过程中,对此类对象在程序启动时被创建,直到程序结束被销毁,局部变量的生命周期依赖于定义的方式。
自动对象
对于普通局部变量对应的对象来说,当函数的控制路径经过变量定义语句时创建该对象,当到达定义所在的块的末端时销毁他,我们把只存在于块执行期间的对象称为自动对象。当块的执行结束后,块中创建的自动对象的值就变成未定义的了。
对于局部变量对应的自动对象来说,则分为两种情况,1如果变量定义本身含有初始值,就用这个初始值进行初始化,2如果变量不含初始值,执行默认初始化,这意味着内置类型的未初始化局部变量将产生未定义的值。
局部静态对象
局部静态对象在程序执行路径的第一次经过对象定义语句时初始化,并且直到程序终止才被销毁,在此期间即使对象所在的函数结束执行也不会对他有影响。

可见我们的ctr对象并没有随函数调用的结束而改变。
如果局部静态变量没有显示的初始值,他将执行值初始化,内置类型的局部静态变量初始化为0。
函数声明
和其他名字一样,函数的声明必须在使用这个函数之前,类似于变量,函数只能定义一次,但是可以被反复声明,唯一的例外是如果一个函数永远不会被我们用到,那么它可以只有声明而没有定义。
函数的声明和定义非常相似,唯一的区别就是函数声明无需函数体,用一个分号代替即可。因为函数的声明不包含函数体,所以就无需形参的名字,事实上,在函数的声明时经常省略形参的名字,但是写上形参还是有好处的,它可以帮助我们理解函数的功能。


我们选择beg和end作为形参的名字表示两个迭代器划定了输出值的范围。
函数的三要素(返回类型,函数名,形参类型)描述了函数的接口,说明了调用该函数所需的全部信息,函数声明也叫做函数原型。
建议变量在头文件中声明,在源文件中定义,与之类似,函数也应该如此。定义函数的源文件应该把含有函数声明的头文件包含进来,编译器负责验证函数的定义和声明是否匹配。



这里其实还有一章分离式编译,但是本人目前学力不足,以后有机会再介绍。