2011/04/07学习笔记

来源:互联网 发布:js数组splice用法 编辑:程序博客网 时间:2024/06/09 14:18

1.在C++中,成员变量的初始化顺序与变量在类型中的申明顺序相同,而与它们在构造函数的初始化列表中的顺序无关。

2.在复制构造函数中传入的参数是A的一个实例。由于是传值,把形参拷贝到实参会调用复制构造函数。因此如果允许复制构造函数传值,那么会形成永无休止的递归并造成栈溢出。因此C++的标准不允许复制构造函数传值参数,而必须是传引用或者常量引用。在Visual StudioGCC中,都将编译出错。

3.32位机器上,任意指针都占4个字节的空间。当数组作为函数的参数进行传递时,数组就自动退化为同类型的指针

4.class A; A *p(不调用构造函数); A *pr=new A(调用构造函数);delete pr(调用析构函数)

5.虚函数的使用,确定缺省参数的值是在编译的时候,但确定引用、指针的虚函数调用哪个类型的函数是在运行的时候。

6.虚函数在构造函数中,已经失去了虚函数的动态绑定特性。

7.C++调用虚函数的时候,要根据实例(即this指针指向的实例)中虚函数表指针得到虚函数表,再从虚函数表中找到函数的地址。

8.在静态数据区,内存中所有的字节默认值都是0x00,共有两种变量存储在静态存储区:全局变量和static变量;Static可以用作函数和变量的前缀
a.对于函数来讲,static的作用仅限于隐藏,会对其它源文件隐藏,只在本源文
件中使用
b.对于变量,保持变量内容的持久,唯一一次初始化;默认值0
c.类中的静态成员变量对所有的对象只有只有一个

d.静态成员函数没有this指针,如果某些成员函数只访问静态数据成员,那么最好把他们声明为静态的成员函数,因为这样不需要特定的对象就可以访问这些成员变量了。静态函数不需要实例化就可以被调用,不会也不可以调用或操纵非静态成员。调用虚函数需要从一个实例中指向虚函数表的指针以得到函数的地址,因此调用虚函数需要一个实例。两者相互矛盾。所以静态函数不能为虚函数。

9. 对于malloc动态分配的内存,一定要用free,以免内存泄露

10.定义任何函数的时候,第一步都要检查参数的合法性

11.无符号数的减法运算能保证只要数字每位一样,那么相减必定为0。反之也成立。而带符号数无法保证这一点。也就是说,当相减为0时,两数的每一位不一定相等。所以,要判断两个变量是否每个bit都相等,必须转换为无符号整数。

12.char b[] 相当于 char * const b;而 char *b 相当于 const char *b,定义一个常量时,只能把它的地址给指向常量的指针,不能给变量指针