曾经犯过的错误c++

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;
};
或许只是单纯的语法禁止该用法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值