c++ primer 学习漏洞总结区 ch5-ch6

ch5

何为块 :被{}包围的就是块,块亦称为复合语句,区域内的自动变量有效期从声明开始,直到块的结束,块是不会以;为结束的。

关于悬垂else :其会自动匹配离他最近的未匹配的if,但是如果所有的if已经被别的else占据了,那么就会报错。

关于switch语句:其实其本质并不是一个判断语句,而是根据switch的检查部分决定了第一次跳入的位置,之后就不会再检查,一直运行到switch的结束,除非被break弹出去。

关于switch内部的定义问题:尽量不要把变量的定义放在switch内部,因为一旦显式的定义被忽略,那么就会报错。但是若果定义的变量,与后面部分不在同一个作用域中,那么可行。比如在case 里面部分添加一个块,在块内做变量的定义。

关于while循环:当我们不清楚循环到底会执行多少次的时候那么,使用while循环就会非常明智。

对于for循环:当我们令其条件判断部分为空语句的时候,条件就一直是true

关于范围for: 格式: for(declaration:expression) statement
**注意点:**当我们一开始范围for,那么遍历的次数就固定了,如果过程中expression的大小发生了变化,那么也不会影响遍历的次数,之后的添加将会被忽略。

关于goto语句: 当利用goto语句往前跳过变量的定义,然后再使用就会报错,若是往回跳则是没有问题。

关于try,catch:在一个try语句之后可以接着多个catch语句,当在try语句里出现了错误,结束try块内运行,然后跳到外部寻找合适的catch来处理当前的异常,若是没有找到,继续抛出,若是最终都没有catch来处理该异常,那么就会由terminate来处理该异常,terminate是标准库函数。

关于runtime_error的what函数:该函数会返回错误的名称。


ch6

何为调用运算符:就是一对(),里面放着具体的实参。

调用函数的具体流程:首先是利用实参去初始化对应的形参(可以将其理解为常规的初始化操作),然后将控制权交给调用函数,主调函数会被中断,然后被调函数会开始执行。

关于函数定义中的形参:①即便形参类型相同,但是每次的形参的类型都必须写下来。 ②形参实参会用自动转化功能 ③当调用函数,根据实参会匹配最合适(即转化的过程最少)的重构函数之一,若是最匹配的,就会给出二义性错误。

关于自动对象:只存在块执行期间的变量是自动对象,当它没有被初始化的时候是无意义的,不能被使用,而定义在块的外头,例如main函数外头的基础变量,他们都会拥有自己的默认值,能被使用。

关于局部静态:该变量只会在第一次碰到的时候定义,然后就会存储在程序的静态区域内,知道程序的生命周期结束才会终止。

关于函数的声明:任何函数在被调取之前,都必须已经经过声明了,不管是在源文件中,还是在头文件中,若是函数在多个源文件都会被调用,那么我们倾向于将其声明在头文件中,那么就能保持一致。

何为分离式编译:我们的整个程序会分为多个源文件和头文件,头文件先include进去,在编译的过程中的都是分开进行编译的,编译产生目标文件,然后再链接到一起产生了可执行文件。

如何避免较大数据类型的拷贝:我们会进行应用传递,或者给出该对象的一个指针,那么我们就不需要对其进行拷贝了,当我们无需对变量进行修改的时候,推荐使用常量引用。

如何返回多个参数:可以在参数列表中添加一个引用,那么我们再函数执行过程中,对其进行操作,最后的结果就会体现在该变量中。

关于const在形参中:如果const属于顶层const(即自己不许变),那么将会被忽略,非常量能进,常量也可以进,字面值也可以进常量引用但是如果不是const,是不能接收const的;如果是底层const(指向的元素不能变),则不能被忽视。

关于数组作为形参,一般都是将指向数组的首元素的指针传进去
在这里插入图片描述
在声明函数时,多维数组除了第一个下标,其余的下标必需是常数表达式。
在这里插入图片描述
关于main函数的参数问题:
在这里插入图片描述
argc是自动生成的,运行时不用接收实参,而argv的首位放的是程序名,后面则是提交的实参。

关于可变实参:提供了两种形参的定义方式
①可以接受任意个相同类型。在这里插入图片描述
initializer_list只能接收常量值,然后可以利用迭代器对其进行遍历,用范围for循环的时候推荐使用常量引用去接
②…只能放在形参的最末尾,然后这一个是不会检查变量类型的,只管接收
在这里插入图片描述
关于返回的引用和指针:绝对不能引用和指向局部变量或者字面值。

关于调用运算符的优先级问题:首先调用运算符和点运算符还有箭头运算符是相同优先级的,因此,在运算的时候是满足左结合律的。

关于返回的类型:当返回类型是一个非常量的引用类型时,返回的就是一个左值,可以放在赋值式子的左侧,然后其他返回类型,就会是一个右值。

在新标准下:可以return{A,B,C,D},然后用vector去接收返回,称作列表初始化返回。同样返回类型可以是内置类型,或者是类,那么列表中的元素依照列表初始化进行要求。

声明一个返回数组指针的函数
在这里插入图片描述
type为返回类型(可以是数组),dimension为返回的数组的维度

尾置返回类型:
在这里插入图片描述
使用deltype来返回指向数组的指针:
在这里插入图片描述
deltype(odd) * 标明最后返回的是一个指针,指向的类型与odd的类型一致。

关于函数重载:重载中的形参的顶层const是不予区分的,而底层const可以区分。

关于默认实参:我们在声明的时候可以给参数提供默认值
注意点:
①一旦一个参数采用默认值,那么它后面的值都应该拥有默认值。(所 以没有默认值的尽量放在前面)
②函数通常都声明在头文件中,对于默认实参来说,每个参数只能被默认声明一次。
③默认值必须时常量表达式。

关于内联函数:适用于规模小,流程直接,频繁调用的函数,机制实在调用部分,将其直接展开。

constexpr函数:用于常量表示的函数
当用其来声明函数时:
①要求只能出现有一个return
②而且返回的要是常数表达式,如果不是则会报错
③将会被作为一个隐式的内联函数
当用其来声明变量时:
①要求变量的初始化的右边部分必须是常量表达式

关于内联函数和constpr函数的声明:他们一般都会声明在头文件,以保证他们在各个源文件上的定义一致。

关于assert(con):其作为一种特殊的调试方式,只有con为真时才会启动,执行其statement,而且assert是由标准库所定义的,可以直接使用,而且程序中不能出现任何同名的成员。

NDEBUG:同样是用来检查异常的,只有NDEBUG没被定义时,assert才能生效,NDEBUG同样还能通另一种形式来使用:
在这里插入图片描述
关于函数指针:再用函数指针指向某个函数时,要求参数不管是类型还是数量一丝不差,而且返回类型也要一丝不差;当函数作为别的函数的形参时,其将会自动转化为函数指针;
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值