第6章 函数

1.   自动对象:只存在于块执行期间的对象

2.   局部静态对象static:在程序执行路径第一次经过对象定义语句时初始化,并且知道程序终止才被销毁,如果局部静态变量没有显示的初始值,初始化为0.

3.   如果函数无须改变引用形参的值,最好将其生命为常量引用。

4.   使用引用形参返回额外信息

5.   和其他初始化过程一样,当用实参初始化形参时会忽略掉顶层const

6.   可以使用非常量初始化一个顶层const对象,但是反过来不行

7.   尽量使用常量引用,防止以为可以改变变量

8.   不许允拷贝数组,在使用数组时(通常)会将其转换成指针,并且确保使用数组时不会越界

9.   关于指针形参的使用,空字符结束和使用标准库规范

10.        P198含有可变形参的函数

11.        省略符形参应该仅仅用于C和C++通用的类型,特别应该注意的是,大多数类类型的对象在传递给省略符形参时都无法正确拷贝

12.        通常情况下,void函数如果想在它中间位置提前退出,可以使用return语句

13.        一个返回函数是void的函数也能使用return另一个返回void的函数

14.        在含有return语句的循环后面应该也有一条return语句,如果没有的话该程序就是错误的

15.        不要返回局部对象的引用或指针

16.        列表初始化返回值:例如返回vevtor<string>如果返回的是内置类型,则花括号包围的列表最多包含一个值,且该值所占的空间不应该大于目标类型空间,如果函数返回的是类类型,由类本身定义初始值如何使用

17.        允许main函数没有return语句直接结束,如果控制到达了main函数的结尾处而且没有return语句,编译器将隐式地插入一条返回0的return语句

18.        Main函数的返回值可以看作是状态指示器,返回0表示执行成功,返回其他值表示执行失败,其中非0值的具体含义依机器而定

19.        使用尾置返回类型:例如:auto func(int i) -> int(*) [10]; 返回一个指针,该指针指向含有10个整数的数组

20.        使用decltype:并不负责把数组类型转换成对应的指针,所以decltype的结果是个数组,想要表示返回指针还必须在函数声明时加一个*符号

21.        函数重载:不允许两个函数除了返回类型外其他所有的要素都相同,内层将隐藏外层声明的同名函数

22.        因为const不能转换成其他类型,所以我们只能把const对象传递给从const形参

23.        形参默认值:被赋予了默认值的形参,后面所有形参都必须有默认值;在给定的作用域中一个形参只能被赋予一次默认值;可多次声明函数给不同形参赋予默认值

24.        内联函数(inline):一般用于优化规模小、流程直接、频繁调用的函数,无递归时,内联函数的请求才会被编译器接受

25.        Constexpr函数:指能用于常量表达式的函数。但返回值可以是非常量;返回和形参类型都是字面值类型,函数只执行一句return;被隐式指定为内联函数;

26.        预处理宏assert:根据提供的表达式判断是否要输出错误信息并终止程序,可定义预处理变量NDEBUG禁用assert的效果,常用于检查“不能发生”的条件

27.        可在#ifndef NDEBUG和#endif之间编写自己的调试代码;有5个编译器预定义的名字变量__func__/__FILE__/__LINE__/__TIME__/__DATE__,用于输出调试信息

28.        函数匹配:先选择在调用点可用的同名候选函数,再找到参数数量相等且类型相同或可强制转换的可行函数,再寻找其中最佳匹配的函数

29.        最佳匹配:每个实参的匹配都不劣于其他可行函数,且至少有一个优于其他;若找不到最佳匹配则报二义性错误

30.        调用重载函数时应尽量避免强制类型转换,如果在实际应用中确实需要强制类型转换,则说明我们设计的形参集合不合理

31.        实参类型转化优先级:精确匹配>const转换>类型提升>算术类型或指针转换>类类型转换

32.        函数指针:声明指向一个函数的指针,只需要用指针替换函数名;将函数名当作值使用时会自动转换成指针

33.        重载函数的指针:指针类型必须与重载函数中的某一个精确匹配

34.        函数指针形参:函数声明中,若形参是函数类型,则它会自动转换成指向函数的指针

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第三介绍了Scala的函数和方法,以及它们的区别。具体内容如下: 1. 函数和方法的区别:函数是一段可以独立调用的代码,它可以像变量一样被传递、返回和赋值;而方法是属于某个对象或类的一段代码,它必须通过对象或类来调用。 2. 函数的定义方式:可以使用def关键字定义函数,也可以使用匿名函数(lambda表达式)。 3. 函数的参数:Scala的函数可以没有参数,也可以有多个参数。参数可以有默认值,也可以是可变参数。 4. 函数的返回值:Scala的函数可以没有返回值,也可以有返回值。返回值类型可以显式声明,也可以自动推断。 5. 方法的定义方式:方法必须定义在对象或类中,使用def关键字表示。方法可以有访问修饰符和参数列表,也可以有返回值类型和方法体。 6. 方法的参数:和函数一样,方法可以有多个参数,也可以有默认值和可变参数。 7. 方法的返回值:方法必须有返回值类型,如果没有显式声明,则默认返回Unit类型。 8. 函数和方法的调用:函数可以直接调用,也可以通过变量、高阶函数等方式调用;方法必须通过对象或类来调用。 9. 函数式编程的特点:函数式编程强调函数的纯粹性、不可变性和高阶函数的使用,它能够简化代码、提高可读性和可维护性。 总之,Scala的函数和方法都是非常重要的编程工具,它们可以让我们更加灵活地组织代码,提高开发效率和代码质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值