函数
1. 基础
函数定义:返回类型、函数名、0个或多个形参和函数体。
返回类型 函数名(形参列表)
{
// 函数体
}
形参和函数体内部定义的变量是局部变量,仅在函数作用域内可见,同时局部变量会屏蔽外层作用域中同名的其他所有声明。
在所有函数体外定义的对象是全局对象。
局部静态对象(由static修饰的局部对象)在第一次访问时初始化, 在程序终止才被销毁。
size_t count_calls()
{
static size_t ctr = 0;
return ++ctr;
}
int main()
{
for (size_t i = 0; i != 10; i++) {
cout << count_calls() << endl;
}
return 0;
}
- 在控制流第一次经过ctr定义以前,ctr被创建并初始化为0,后面每次调用ctr值自增1。
- 局部静态变量没有显式初始化时,它将执行值初始化,内置类型的局部静态变量初始化为0。
函数只能定义一次,但可以声明多次(唯一例外15.3节)。对于不被调用的函数可以声明但不定义。(函数声明发生在编译期,定义发生在链接期)。函数声明可以省略形参。
类似变量,建议函数在头文件声明,源文件定义。
含有函数声明的头文件应该被包含到定义函数的源文件中。
2. 参数传递
- 引用传递:引用形参时对应实参的别名
-
值传递:实参和形参是两个互相独立的对象
-
使用引用避免拷贝
- 使用引用形参返回额外信息