6.函数

6.1基础

实参是形参的初始值。

局部对象

名字有作用域,对象有生命周期。

名字的作用域是程序文本的部分,名字在其中可见。

对象的生命周期是程序执行过程中该对象存在的一段时间。

形参和函数体内部定义的变量统称为局部变量。它们对函数而言是“局部”的,仅在函数的作用域内课件,同时局部变量还会隐藏在外层作用域中同名的其他所有声明中。

函数声明

函数只能定义依次,但可以声明多次。函数声明无须函数体,用一个分好替代即可。因为函数的声明不包含函数体,所以也就不需要形参的名字。

函数的三要素(返回类型、函数名、形参类型)描述了函数的接口,函数声明也称为函数原型。

分离式编译

分离式编译允许我们把程序分割到几个文件中去,每个文件独立编译。

6.2参数传递

如果形参是引用类型,它将绑定到对应的实参中;否则将实参的值拷贝后赋给形参。(形参用&,即引用,函数使用的其实是实参,如有更改,实参更改)。形参是引用类型,称它对应的实参为引用传递,函数被传引用调用。引用形参是它对应的实参的别名。

指针形参

只是实参的指针指向的位置拷贝给形参,所以两者指向都是同一个对象。

建议使用引用类型的形参替代指针。

使用引用避免拷贝

当某种类型不支持拷贝操作时,就只能用引用形参访问对象。

使用引用形参还能返回额外的信息

Return只能返回一个值,引用形参更改了实参的值,其实是返回多个结果。

Const形参和实参

当形参有顶层const是,传给它的对象常量或者非常量对象都是可以的。

尽量使用常量引用,不能把const对象、字面值或者需要类型转换的对象传递给普通的引用形参。

数组形参

数组的特殊性质:

(1)不允许拷贝数组以及使用数组时(通常)会将其转换成指针,所以不能值传递。

(2)因为数组会转换成指针,所以当我们为函数传递一个数组时,实际上传递的是指向数组首元素的指针。

管理数组长度的三种技术

(1)使用标记指定数组长度,要求数组本身包含一个结束标记,如字符串的空字符。

(2)使用标准库规范,传递数组首元素和尾后元素的指针。(begin,end函数)

(3)显示传递一个数组的大小

只有当函数确实要改变元素值的时候才把形参定义成指向非常量的指针。

实参要与形参定义的数组维度一致。

含有可变形参的函数

使用initializer_list的条件是函数的实参数量未知但是全部实参类型相同。其内部元素永远是常量

6.3返回类型和return语句

不要返回局部对象的引用和指针。

可以返回花括号包围值的列表。

返回数组指针

返回数组和指针比较麻烦,可以使用类型别名。

返回数组,要牢记被定义名字后面数组的维度。

使用尾置返回类型,

使用decltype

6.4函数重载

一个拥有顶层const的形参无法和另一个没有顶层const的形参区分开来;

函数匹配是指一个过程,在这个过程中我们把函数调用与一组重载函数中的某一个关联起来,函数匹配也叫做重载确定。

6.5特色用途语言特性

6.5.1默认实参

这样一种形参,在函数的很多次调用中他们都被赋予一个相同的值,此时,称这个反复出现的值为默认实参。

给定的作用域中的一个形参只能赋予一次默认实参。函数的后续声明只能为之前那些没有默认值的形参添加默认实参,而且该形参右侧的所以形参必须都有默认值。

6.5.2内联函数和constexpr

内联函数加上inline可以避免额外花销。

Constexpr函数能用于常量表达式,函数的返回类型及所有形参的类型都得是字面值类型,而且函数体中必须有且只有一条return语句:

6.6函数匹配

最佳匹配:实参类型与形参类型越来越近,它们匹配的越好。

所有的算术类型转换的级别都一样。

6.7函数指针

不能定义函数类型的形参,但是形参可以是指向函数的指针。也可以返回指向函数类型的指针。

��C0����

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352

推荐阅读更多精彩内容

  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 9,515评论 1 51
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,231评论 0 4
  • [The Swift Programming Language 中文版]本页包含内容: 函数是用来完成特定任务的独...
    风林山火阅读 479评论 0 0
  • vi常用快捷键(在一般模式下使用) a 在光标后一位开始插入 A 在该行的最后插入 I 在该行的最前面插...
    陳青然阅读 520评论 0 0
  • 深夜,眺望满是星辰的夜空。 “人生这趟列车,开动就回不去。转眼已二十几,却总是孩子气,什么时候真正能顶天立地,朋友...
    掌灯的猫阅读 467评论 5 14