C++Primer 重点记忆内容
- 把一个非bool值复制给bool类型的变量时,初始值为0则结果为false,否则为true(-1也转变成true)
- 有符号数与无符号数运算,会被自动转换成无符号数。(危险)
- 内置类型的未初始化局部变量将产生未定义的值,而全局变量将自动被初始化为0.
https://blog.csdn.net/qq_36946274/article/details/80607439 - auto会忽略掉顶层const,保留底层const
- 当同时使用cin>>,getline()时,需要注意的是,在cin>>输入流完成之后,getline()之前,需要通过
string str="\n";
getline(cin,str);
的方式将回车符作为输入流cin以清除缓存,如果不这样做的话,在控制台上就不会出现getline()的输入提示,而直接跳过,因为程序默认地将之前的变量作为输入流。
7. int *ip[4] //是整型指针的数组,Int (*ip)[4] //指向含有4个整数的数组
8. 如果函数无需改变引用形参的值,最好将其声明为常量引用。
当形参是普通引用时,传递的实参不可以时const对象和字面值。
而当形参时const引用时,传递的实参可以是const对象和字面值,也可以是非const对象。
8. 当形参有顶层const时,传给它常量对象或者非常量对象都是可以的。(实参初始化形参时会忽略顶层const)
9. 如果函数返回值是引用类型,则不能返回局部对象的引用或者是字面值的引用(会转变成局部变量)
10. 调用一个返回引用的函数得到左值。
11. 把函数名作为一个值使用时,该函数自动地转换成指针。
12. 对于不会修改类的数据的函数,可以声明成常量成员函数,在形参列表后加上const;
13. 常量对象只能调用常量成员函数。
14. 使用构造函数初始值的效率更高,是直接初始化而不是赋值。
15. explicit构造函数只能用于直接初始化,不能隐式转化,比如赋值。
16. 数组指针可以作为一个二维数组的引用。
https://blog.csdn.net/u014587123/article/details/82288622
17.只有当一个类被用来作为基类的时候,才会把析构函数写成虚函数
18.父类指针指向子类实例对象,调用普通重写方法时,会调用父类中的方法。而调用被子类重写虚函数时,会调用子类中的方法。
再次说明了,子类中被重写的虚函数的运行方式是动态绑定的,与当前指向类实例的父类指针类型无关,仅和类实例对象本身有关。
19.友元函数 https://www.runoob.com/cplusplus/cpp-friend-functions.html
20.基类向派生类不存在隐式类型转换,若基类指向的实例对象为派生类对象,并且基类含有一个或多个虚函数,则可以使用dynamic_cast来请求一个类型转换,
21.因为dynamic_cast在向下转换时,会检查该基类指针是否是指向其派生类对象的,否则返回NULL;另外要注意:基类要有虚函数,否则会编译出错,向上转换则不必有虚函数。这是因为运行时的类型检测需要用到运行时的类型信息,而这个信息存储在类的虚函数表里。只有定义了虚函数的类才有虚函数表,没有定义虚函数的类是没有虚函数表的。
22.多线程:信号量、互斥锁、条件变量
https://leetcode-cn.com/problems/print-in-order/solution/c-hu-chi-suo-tiao-jian-bian-liang-xin-hao-liang-yi/
http://blog.chinaunix.net/uid-20671208-id-4935154.html
23.析构函数为什么不能抛出异常:
析构函数不能抛出异常
24.什么样的类不能被继承
https://blog.csdn.net/qq_34796146/article/details/108065409
25.多继承、虚继承、虚基类http://m.biancheng.net/view/2280.html
26.C++中的new和c中的malloc区别