[C++ Primer CH06] 第6章 函数(笔记)
来源:互联网 发布:java验证码识别算法 编辑:程序博客网 时间:2024/06/08 13:42
小结:
函数是命名了的计算单元,它对程序(哪怕是不大的程序)的结构化至关重要。每个函数都包含返回类型、名字、(可能为空的)形参列表以及函数体。函数体是一个块,当函数被调用的时候执行该块的内容。此时,传递给函数的实参类型必须与对应的形参类型相容。
在C++语言中,函数可以被重载:同一个名字可以用于定义多个函数,只要这些函数的形参数量或形参类型不同就行。根据调用时所使用的实参,编译器可以自动的选定被调用的函数。从一组重载函数中选取最佳函数的过程被称为函数匹配。
笔记:
我们建议变量在头文件中声明,在源文件中定义。与之类似,函数也应该在头文件中声明而在源文件中定义。
在C++语言中,建议使用引用类型的形参代替指针。
如果函数无须改变引用形参的值,最好将其声明为常量引用。
如何定义函数使得它能够既返回位置也返回出现次数呢?一种方法是定义一个新的数据类型,让它包含位置和数量两个成员。还有另一种更简单的方法,我们可以给函数传入一个额外的引用实参,令其保存字符出现的次数。
将多维数组传递给函数的时,我们处理的时数组的数组,所以首元素本身就是一个数组,指针就是一个指向数组的指针。
为了编写能处理不同数量实参的函数,C++11新标准提供了两种主要的方法:1.如果所有的实参类型相同,可以传递一个名为initializer_list的标准库类型;2如果实参的类型不同,我们可以编写一种特殊的函数,也就是所谓的可变参数模板。
在含有return语句的循环后面应该也有一条return语句,如果没有的话该程序就是错误的。很多编译器都无法发现此类错误。
要想确保返回值安全,我们不妨提问:引用所引的是在函数之前已经存在的哪个对象?
在C++11新标准中还有一种可以简化上述func声明的方法,就是使用尾置返回类型(trailing return type)。任何函数的定义都能使用尾置返回,但是这种形式对于返回类型比较复杂的函数最有效,比如返回类型是数组的指针或者数组的引用。
尽管函数重载能在一定程度上减轻我们为函数起名字、记名字的负担,但是最好只重载那些确实非常相似的操作。有些情况下,给函数起不同的名字能使得程序更容易理解。
执行调试代码的方法用到两项预处理功能:assert和NDEBUG。
调用重载函数时应尽量避免强制类型转换。如果在实际应用中确实需要强制类型转换,则说明我们设计的形参集合不合理。
FAQ:
Q1:函数的形参为什么尽量使用常量引用?
A1:1、把函数不会改变的形参定义成(普通的)引用是一种比较常见的错误,这么做带给函数的调用者是一种误导,即函数可以修改它的实参的值。
2、使用引用而非常量引用也会极大地限制函数所能接受的实参类型。
Q2:函数匹配的步骤?
A2:1、函数匹配的第一步是选定本次调用对应的重载函数集,集合中的函数称为候选函数(condidate function)。候选函数具备两个特征;一是与被调用的函数同名,二是其声明在调用点可见。
2、考察本次调用提供的实参,然后从候选函数中选出能被这组实参调用的函数,这些新选出的函数称为可行函数(viable function)。
3、是从可行函数中选择与本次调用最匹配的函数。
Q3:对象的生命周期?
A3:每个对象斗鱼相应的生命周期。块内定义的非静态对象的生命周期从它的定义开始,到定义所在的块末尾为止。程序启动后创建全局对象,程序控制流经过局部静态对象的定义时创建该局部静态对象;当main函数结束时销毁全局对象和局部静态对象。
- [C++ Primer CH06] 第6章 函数(笔记)
- 《c++ primer》第6章 函数 笔记
- C++Primer第6章学习笔记
- C++Primer 第6章笔记整理
- C++primer plus第7-8章函数笔记
- 《C++Primer》读书笔记——第6章 函数
- C primer plus第9章(函数)习题
- C++ Primer 第6章 函数 学习笔记
- C++primer plus第4-6章笔记
- C++primer学习笔记 第7章
- C++Primer 第3章笔记整理
- C++Primer 第5章笔记整理
- C++Primer 第7章笔记整理
- 《c++primer》笔记 第1章 开始
- C++Primer第五版 第6章 函数(练习解答)
- C++Primer第5版读书笔记(第6章)
- C++primer(第五版)第六章函数学习笔记
- C++Primer笔记 第七章 函数
- 服务器下的python调试方法
- android 随笔
- 【51Nod】1137 矩阵乘法
- 事务和连接池
- jquery源码分析
- [C++ Primer CH06] 第6章 函数(笔记)
- 疯狂java讲义第十六章(多线程)书后习题我的解答以及反思
- [最大费用最大流]HDU 5988 Coding Contest
- 开始写博客的一些心里话
- 关于图论的若干巴拉巴拉
- JavaScript基础
- C++程序员学Java系列之五:常量,变量,基本数据类型及转换
- 常见几种排序算法
- jquery扩展函数详解(我的人生颠覆)