1.无限构造
4.子类给父类成员初始化列表
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;
};
或许只是单纯的语法禁止该用法。