知识点:
1、变量的默认值(由定义的位置决定)
变量未被显式初始化,它的值由定义的位置决定。
定义在任何函数体之外的变量被初始化为0(类型:int double,float数据类型,char.string类型默认值不是0);定义在函数体内部的变量将不被初始化。
2、#pragma once
3、指针的指针(第二章)
4、常量表达式constexpr(第二章)
5、decltype使用
6、1>-1 一个正数与负数的比较(负数会先转化为无符号的数,且值很大。)
7、泛型编程( P97)
原来使用c或java的程序员在转而使用c++语言后,会对for循环中使用 != 而非 < 进行判断有点奇怪,c++中习惯用使用!= 。
原因和他们更愿意使用迭代器而非下标的原因一样:因为这种编程风格在标准库提供的所有容器上都有效。
只有string和vector等一些标准库类型有下标运算符,而并非全都如此。
与之类似,所有标准库容易的迭代器都定义了==和 !=,但是他们中的大多数都没有定义< 运算符。
因此,只要我们养成使用迭代器和 != 的习惯,就不用太在意用的到底是哪种容器类型。
8、数组与vector的相同点不同点(性能比较)
9、数组、标准库类型vector和string,都能使用范围for语句或下标运算符来访问数据****
10、尽量使用标准库类型而非数组
使用指针和数组很容易出错。一部分原因是概念上的问题:指针常用于底层操作,因此容易引发一些与繁琐细节有关的问题。
其他问题则源于语法错误,特别是声明指针时的语法错误。
现在的c++程序尽量用vector和迭代器,避免使用内置数组和指针;尽量使用string,避免使用c风格基于数组的字符串。
11、空语句,什么时候用到空语句?
12、理解什么是悬垂(dangling else)?(P158)
13、程序块不以分号作为结束。
14、范围变量必须是引用类型,这样才能对元素执行写操作
联想思考:python中的数组,是否真正可以修改数组里面的值
10、异常try catch
11、引用形参的函数返回多个值(P189)指针形参(p188)
12、void函数如果想在它的中间位置提前退出,可以使用return语句。(return的这种用法类似于我们用break语句退出循环)
13、不要返回局部对象的引用或指针(因为函数终止意味着局部变量的引用将指向不再有效的内存区域)
14、主函数main的返回值(main函数不能重载)
a、如果控制到达了 main函数结尾处且没有return语句,编译器将隐式的掺入一条返回0的return语句。
b、main函数的返回值可以看做是状态指示器。返回0表示执行成功,返回其他值表示执行失败,其中非0值的具体含义依机器而定。
c、main函数不能调用它自己(递归函数)
15、预处理器
以#号开头,代表是预处理文件,表示在文件没有被编译之前。
include
这段代码表示,预处理引入iostream文件(等同于把里面的内容都复制粘贴过来。)