C++primer学习笔记-----6.1函数基础
2017-05-07 13:06
218 查看
【实参是形参的初始值,用于调用函数时初始化形参。
实参与形参的类型和数量必须一一对应,但是C++ 语言并未对实参的求职顺序做出规定。】
【函数的形参列表可以为空,但是不能省略。
定义一个不带形参的函数,最常用的办法是书写一个空的形参列表。】
【形参一般都应该有个名字。偶尔,函数确实有个别形参不会被用到,此类形参通常不命名以表示在函数体内不会使用它。
不管怎样,即使某个形参不被函数使用,也必须为其提供一个实参,所以是否设置未命名的形参并不影响调用时提供的实参数量。】
【大多数类型都能用作函数的返回类型。一种特殊的返回类型是void。
函数的返回类型不能是数组类型或函数类型,但可以是指向数组或函数的指针。】
名字的作用域是程序文本的一部分,名字只有在其作用域中可见;
对象的生命周期是程序执行过程中该对象存在的一段时间。】
【语句块:块也会构成一个新的作用域,这是语句块不能等价于一条语句的一个特点。】
【某些时候,有必要令局部变量的生命周期贯穿函数调用及之后的时间。
局部静态对象(static 类型)在程序的执行路径第一次经过对象定义语句时初始化(后几次经过定义语句时忽略该定义语句),具有永久的生命周期和局部的作用域(不会被销毁,值保留)。
形参不能被声明成静态类型,因为没有必要。(每次调用函数使用实参进行初始化,所以值的保留毫无意义)
与外部作用域中定义的变量的区别是作用域的区别。】
【如果局部静态变量没有显式的初始值,它将执行值初始化,内置类型的局部静态变量初始化为0。】
当调用其他文件中定义的函数时,必须包含对该函数的声明(与变量类似):
函数的声明与函数的定义类似,区别是函数声明不必书写函数体,用一个分号代替即可;
函数的声明也不是必须书写形参的名字,但是书写上形参的名字可以帮助使用者更好地理解函数的功能。】
【变量在头文件中声明,使用该函数的文件应该包含头文件,定义该函数的文件也包含该头文件:
使用该函数的文件通过包含头文件的方式声明函数,而不是在文件主体中声明函数,可以保证所有使用该函数的文件对被调函数的声明一致,也可以在被调函数的接口发生改变时仅改变头文件而不必把所有调用该函数的文件中的声明语句逐一修改。
定义该函数的文件也要包含该头文件,可以使编译器帮助我们验证函数的定义和声明是否匹配。】
6.1.3 分离式编译
{分离式编译的编译和链接的原理。
使用编译器对代码进行编译链接的方法。}
实参与形参的类型和数量必须一一对应,但是C++ 语言并未对实参的求职顺序做出规定。】
【函数的形参列表可以为空,但是不能省略。
定义一个不带形参的函数,最常用的办法是书写一个空的形参列表。】
【形参一般都应该有个名字。偶尔,函数确实有个别形参不会被用到,此类形参通常不命名以表示在函数体内不会使用它。
不管怎样,即使某个形参不被函数使用,也必须为其提供一个实参,所以是否设置未命名的形参并不影响调用时提供的实参数量。】
【大多数类型都能用作函数的返回类型。一种特殊的返回类型是void。
函数的返回类型不能是数组类型或函数类型,但可以是指向数组或函数的指针。】
6.1.1 局部对象
【在C++ 语言中,名字有作用域,对象有生命周期:名字的作用域是程序文本的一部分,名字只有在其作用域中可见;
对象的生命周期是程序执行过程中该对象存在的一段时间。】
【语句块:块也会构成一个新的作用域,这是语句块不能等价于一条语句的一个特点。】
【某些时候,有必要令局部变量的生命周期贯穿函数调用及之后的时间。
局部静态对象(static 类型)在程序的执行路径第一次经过对象定义语句时初始化(后几次经过定义语句时忽略该定义语句),具有永久的生命周期和局部的作用域(不会被销毁,值保留)。
形参不能被声明成静态类型,因为没有必要。(每次调用函数使用实参进行初始化,所以值的保留毫无意义)
与外部作用域中定义的变量的区别是作用域的区别。】
【如果局部静态变量没有显式的初始值,它将执行值初始化,内置类型的局部静态变量初始化为0。】
6.1.2 函数声明
【为了再重新使用某函数时不用重新书写代码,C++ 支持分离式编译,使得主调函数和被调函数可以书写在不同的文件中。当调用其他文件中定义的函数时,必须包含对该函数的声明(与变量类似):
函数的声明与函数的定义类似,区别是函数声明不必书写函数体,用一个分号代替即可;
函数的声明也不是必须书写形参的名字,但是书写上形参的名字可以帮助使用者更好地理解函数的功能。】
【变量在头文件中声明,使用该函数的文件应该包含头文件,定义该函数的文件也包含该头文件:
使用该函数的文件通过包含头文件的方式声明函数,而不是在文件主体中声明函数,可以保证所有使用该函数的文件对被调函数的声明一致,也可以在被调函数的接口发生改变时仅改变头文件而不必把所有调用该函数的文件中的声明语句逐一修改。
定义该函数的文件也要包含该头文件,可以使编译器帮助我们验证函数的定义和声明是否匹配。】
6.1.3 分离式编译
{分离式编译的编译和链接的原理。
使用编译器对代码进行编译链接的方法。}
相关文章推荐
- DELPHI语法基础学习笔记-Windows 句柄、回调函数、函数重载等
- DataTable学习笔记--基础函数变量[1]
- Python基础函数学习笔记(三)
- 黑马程序员_java基础学习笔记03_函数以及数组知识
- Lua基础教程之赋值语句、表达式、流程控制、函数学习笔记
- 黑马程序员--学习笔记之SQL基础语句及函数
- C++基础学习笔记----第四课(函数的重载、C和C++的相互调用)
- 《jquery权威指南2》学习笔记------基础函数
- [原]java专业程序代写(qq:928900200),学习笔记之基础入门<Oracle_函数_触发器_游标_存储过程_视图>(三十五)
- js面向对象学习笔记之七(函数 与 基础控制结构)
- 嵌入式开发之C基础学习笔记05--模块化设计和函数的使用
- java 从零开始,学习笔记之基础入门<SQL_Server_视图_函数_存储过程_触发器等>(二十三)
- 黑马程序员_毕向东_Java基础_DAY03_函数_学习笔记
- C++primer学习笔记之函数
- javascript学习笔记 (一)-函数基础
- 基础学习笔记之opencv(24):imwrite函数的使用
- 基础学习笔记之opencv(18):kmeans函数使用实例
- [原]java专业程序代写(qq:928900200),学习笔记之基础入门<SQL_Server_视图_函数_存储过程_触发器等>(二十三)
- Java中执行存储过程和函数(web基础学习笔记十四)
- c++学习笔记之基础---类内声明函数后在类外定义的一种方法