其实这篇是在3号就写完了的,当时忘记发了,后面的附录暂时不准备看了,这样算下来一共花了31天看完这本C++ Primer Plus,比之前计划的多了六天,还可以接受吧,中间大大小小的事也耽误了几天。现在正在图书馆看C++ Primer,读起来确实Plus更加适合入门一点,目前Primer前面的部分对我来说如同鸡肋,但直接罗国又怕错过一些知识点,只好快点看吧,前几章基础的应该不会写笔记了,或者直接把不会的新知识汇总成一篇。
统一的初始化: 统一支持初始化列表语法,可以防止将数值赋给无法储存它的数值变量,即防止缩窄。
返回类型后置: 在函数的参数列表后用指针指出返回类型,可以使用decltype语法
模板别名:using= 可以替代typedef创建别名,也可用于模板部分具体化。
nullptr: 防止空指针与0混淆。
异常规范: 摒弃异常规范,但保留声明函数不会出现异常的noexcept
作用域内枚举: 在同一个作用域内的不同枚举内的枚举成员不能同名,使用class或struct定义可以使其名称可以重复,因为其属于其本身的作用域。
explicit: 使构造函数不可以被用作类型转换函数
右值引用: 使用&&来表示右值引用,这使移动构造函数可以实现,即实现移动语义
移动语义: 当参数为一个右值,如一个函数的返回值,一个表达式的结果时,其在被调用后就会被删除,那么对其进行深度复制就没有必要了,只要将原来数据的所用权直接转给新的对象就可以。移动构造函数以右值引用作为参数,不执行深度复制,直接夺取所有权。
若要强制使用移动构造函数或赋值运算符,可以使用static_cast<>强制转换对象的类型。或使用move()将其变为右值。
类功能:
- deafult:在提供了构造函数后,默认构造函数便不再提供,可以用defalt关键字声明默认的犯法
- delete:使某种方法无法被使用,使用将导致编译错误。
- 继承构造函数:当子类中无对应的构造函数时,可以使用父类中的构造函数
- override:表示将覆盖父类中的虚方法,其参数必须相同
- final:禁止派生类覆盖该虚方法
lamda:
可以看做隐藏了名字的函数,可以用auto将lamda函数指定一个名称,使其可以被重用。其前面的方括号内的参数可以使其以引用或值的方式访问作用域内的所有变量。
包装器: 将参数和返回值相同的包装成同样的类,使得模板函数不会因为类似但不完全相同的函数而被重复实例化。
可变参数模板: typename… Args用来表示多个内置类型的参数。一般通过将第一个远素提出来然后将剩余内容进行递归的方式完成操作