曾经犯过的错误c++

来源:互联网 发布:php跳转token设置过期 编辑:程序博客网 时间:2024/06/01 19:56
1.无限构造
struct A{A(A a){}};
-----------------------------------------------------------------
struct A{A(const A& a);}
2.switch case块里定义数据
int a = 0;switch(a){case 0:int b = 0;break;deafut:break;}
-----------------------------------------------------------------
int a = 0;switch(a){case 0:{int b = 0;}break;deafut:break;}

3.namespace 里包含库头文件
namespace _Liuxb{#include <iostream>}
-----------------------------------------------------------------
#include <iostream>namespace _Liuxb{}

4.子类给父类成员初始化列表
struct B{int b;};struct D{D():b(0),d(1){}int d;};
-----------------------------------------------------------------
实事上子类对象初始化过程是父类先初始化列表,后完成父类初始化函数实体,然后子类对象初始化列表,完成子类初始化函数实体。上述做法错误的原因不知道。
但对象的初始化从此例看来类似于先将一段内存覆盖上指定值,后调用初始化函数实体。就像:
memset(p,0,sizeof(*p));
init(p);
我开始以为产生错误的原因是当时this指针还没产生,无法计算出父类成员的地址。后来发现不是,虽然此时还没有this指针。但是可以拿b给d赋值。this指针在子类初始化列表之后,初始化函数实体运行之前就已经存在。
struct D{D():d(b){}int d;};
或许只是单纯的语法禁止该用法。