关于调用默认构造函数

yirengirl 2001-09-05 11:02:04
我写了一个简单的类Ctest,类中有一个成员变量int a,并没有定义构造函数与析构函数。
定义一个类的对象
Ctest str;
然后打印出str.a
这是一个非常简单的类,按理说系统将自动调用默认构造函数把str.a初始化为0。可我的打印结果却为:-858993460
我的编译环境是VC++6.0,为什么?
...全文
189 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
magicblue 2001-09-06
  • 打赏
  • 举报
回复
有些编译器的默认构造函数是会给数据成员置0的
cococut 2001-09-06
  • 打赏
  • 举报
回复
1,缺省的构造函数不会给类的数据成员赋值;
2,如果定义自己的构造函数,类中就不会生成缺省的构造函数;
3,重载构造函数的时候,给参数赋默认值以后,要注意产生二义性;
比如:
class A
{
A();
A(int mm = 0);
}
如果:
A a;
则产生二义性,不知道该调用那个构造函数,其他的调用过程向(知秋一叶)所说!
rockhard 2001-09-06
  • 打赏
  • 举报
回复
如果你没有显示的写一个构造函数,就如qqchen79(知秋一叶)所说的那三种情形下编译器才会为你产生一个默认的构造函数,否则是不会有默认的构造函数。象你所说的那个类不会产生默认的构造函数,更不要谈什么初始化了。
fsb_12345 2001-09-06
  • 打赏
  • 举报
回复
up
San_Daniel 2001-09-06
  • 打赏
  • 举报
回复
接qqchen79(知秋一叶)
4.当类有一个或多个virtual base class时,编译器会为你生成默认构造函数,具体工作视编译器不同
magicblue 2001-09-06
  • 打赏
  • 举报
回复
你不是都说了吗,那是标准,各个厂家的编译器会100%遵循标准吗?
liu_feng_fly 2001-09-06
  • 打赏
  • 举报
回复
c++语法规定,只有静态的成员变量编译器才会负责初始化为0的责任!!
qqchen79 2001-09-05
  • 打赏
  • 举报
回复

缺省构造函数不会替你初始化变量的!
她的工作主要有三个:
1. 如果你得类是从其它类继承而来,它有必要调用父类的构造函数。
2. 如果你得类中有复杂类成员变量(不包括build-in类型如int),那么它需要调用这些成员变量的构造函数。
3. 如果你得类有virtual函数,它需要填写vptr指向相应的vtable。

至于不初始化的原因,主要是出于性能的考虑,初始化变量需要时间,而且,程序员应该比编译器更清楚什么时候应该初始化什么变量。
Fantasia 2001-09-05
  • 打赏
  • 举报
回复
谁告诉你的?

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧