C++ primer (5th) 随想与学习笔记 8

来源:互联网 发布:知乎 韩信 刘邦男宠 编辑:程序博客网 时间:2024/05/27 09:44

第六章 函数

函数就是给定地址的代码块。

6.1 函数基础

实参和形参要数量和类型一致,但没规定求值顺序。没有形参的函数可以写成

<span style="font-size:14px;">void f1(){/*...*/} //隐式的定义空形参列表void f2(void){/*...*/} //显式的定义空形参列表</span>

即使类型一样,也要分开声明
<span style="font-size:14px;">int f3(int v1, v2){/*...*/} //错误int f3(int v1, int v2){/*...*/} //正确</span>
函数外的局部变量不能使用与函数形参一致的名字?可以有未命名的形参,但调用时必须提供实参。

函数声明也称为函数原型(Function prototype),声明中最好用上名字,方便理解函数功能。与声明变量一样,函数原型也应该放在头文件里。C++语言支持分离式编译!

6.2 参数传递

实参被引用传递(passed by reference)的函数叫做传引用调用(called by reference);实参被值传递(passed by value)的函数叫做传值调用(called by value)。

C语言中经常通过指针类型的形参访问外部对象,在C++中建议使用引用类型。对无须改变引用形参的值将其声明为常量引用。形参可以辅助return返回多个值。

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

<span style="font-size:14px;">int i = 42;const int &r = i;\\正确int &r1 = r;\\错误int &r2 = 42;\\错误int r3 = r;\\正确 只是拷贝了一个副本</span>

字面值不能初始化非常量引用,但可以初始化常量引用。

main()函数使用的实参是从argv[1]开始的,argv[0]代表的是程序的名字。有三种可以含有可变形参函数的方法,initializer_list模板、来自C语言的省略符和可变参数模板。

6.3 返回类型和return语句

不要返回局部对象的引用和指针。返回类型是引用的函数可以作为左值。

返回数组指针的函数的声明格式为

<span style="font-size:14px;"><span style="font-size:14px;">Type (*function(parameter_list))[dimension]</span></span>

C++11新标准添加了尾置返回类型,如返回含有十个整数数组的指针或引用,可写为
<span style="font-size:14px;"><span style="font-size:14px;">auto fun(int i) -> int(*)[10]</span></span>

6.4 函数重载

重载函数是形参个数和形参类型不同,和返回类型无关。

没必要为减轻命名负担而使用重载函数。C++语言中名字查找发生在类型检查之前,因此发现局部声明就会忽略全局声明。

6.5 特殊用途语言特性

默认实参、内联函数和constexpr函数。

局部变量不能作为默认值,默认实参的名字在函数声明的作用域解析,而名字的求值在函数调用时

<span style="font-size:14px;">// wd、def和ht的声明必须出现在函数之外sz wd = 80;char def = ' ';sz ht();string screen(sz = ht(), sz = wd, char = def);string window = screen();// 调用 screen(ht(), 80, ' ')void f2(){    def = '*';//改变默认实参的值    sz wd = 100;//隐藏了外层定义的wd,但是没有改变默认值    window = screen();//screen(ht(), 80, '*')}</span>
 注意第二个“80”没有改变!

内联函数就是在编译的时候在调用出展开,对优雅简短的代码有效果,但很多编译器不支持内联递归函数。

constexpr表示能用于常量表达式,但不代表返回常量。constexpr函数体中有且只有一条return语句。

6.6 函数匹配

函数重载是时,尽量不要用到隐式强制类型转换,虽然可以。若用到那就说明我们的形参设计的不够合理。

6.7 函数指针

函数在调用时自身就是指针。

终于把这章看完了,挺难的,细节很多,和C语言差别越来越大了,下面一章就要进入类类型了。

0 0
原创粉丝点击