C++注意事项

时间:2023-03-09 20:27:37
C++注意事项

1.static和const不能同时修饰类的成员函数(static int getde()const;)

  分析原因在于const会在函数中添加一个隐式参数const this*,而static是没有this指针的,此时static的用法和static就产生了冲突。

  其他解释:两者的语意是矛盾的。static的作用是表示该函数只作用在类型的静态变量上,与类的实例没有关系;而const的作用是确保函数不能修改类的实例的状态,与类型的静态变量没有关系。因此不能同时用它们。

2.被static修饰的类成员函数不能同时也是virtual

  分析:调用静态成员函数不要实例。但调用虚函数需要从一个实例中指向虚函数表的指针以得到函数的地址,因此调用虚函数需要一个实例。两者相互矛盾。

3.只要不访问非法的内存,程序就不会出错。

  

    struct Point3D { int x;  int y;  int z;  };

    int main(){

    Point3D* pPoint = NULL;

    int offset = (int)(&(pPoint)->z);

     printf("%d", offset);

    return 0;

    }

    输出8

    分析: &(pPoint->z)的语意是求pPoint中变量z的地址(pPoint的地址0加z的偏移量8),并不需要访问pPoint指向的内存。

4.virtual 在32位机上占4个字节 在64位机上运行占8个字节

5.c++中,如果没有标明函数或者变量的访问权限级别,在struct中,是public的;而在class中,是private的。

6.如果父类对象被赋值为子类对象( A* pA = new B();  delete pA; ),并且未使用虚析构,则在delete时只会执行父类析构函数。

7.拷贝构造函数的参数使用引用类型不是为了减少一次内存拷贝,而是避免拷贝构造函数无限制的递归下去。所以,拷贝构造函数是必须要带引用类型的参数的, 而且这也是编译器强制性要求的【实例】