在 C++ 中,名字有作用域,对象有生命周期。
名字的作用域是程序文本的一部分,名字在其中可见。
对象的生命周期是程序执行过程中该对象存在的一段时间。
函数体是一个语句块。块构成一个新的作用域,可以在其中定义变量。形参和函数体内部定义的变量统称为局部变量。他们对函数而言是“局部的”,仅在函数的作用域内可见。同时局部变量还会隐藏在外层作用域中同名的其它所有声明中。
当函数的控制路径经过变量定义语句时创建该对象,当到达定义所在的块末尾时销毁它。这种只存在于块执行期间的对象被称为自动对象。当块的执行结束后,块中创建的自动对象值就变为未定义的了。
形参是一种自动对象:函数开始时为形参申请储存空间,因为形参定义在函数体作用域内,所以一旦函数终止,形参也就被销毁。
使用传递给函数的实参初始化形参对应的自动对象。
有时有必要令局部变量的生命周期贯穿函数调用及之后的时间。可以将局部变量定义成 static 类型从而获得这样的对象。
局部静态对象在程序的执行路径第一次经过对象定义语句时初始化,直到程序终止才被销毁,期间即使所在的函数结束也不会产生影响。
统计自己被调用的次数、输出1到10
函数的名字必须在使用之前声明,且只能定义一次,但可以声明多次。
函数的声明和定义非常类似,区别是函数声明无需函数体,用一个分号代替即可。
因为函数的声明不包含函数体,所以就无需形参的名字。(但写上名字可以更好的帮助理解)
函数的三要素(返回类型、函数名、形参类型)描述了函数的接口,说明了调用该函数所需的全部信息。函数声明也称作函数原型。
建议将变量在头文件中声明,在源文件中定义,函数也同样如此。