为了账号安全,请及时绑定邮箱和手机立即绑定

堆中声明的疑问

Student *p = new Student()  和 Student *p = new Student;

有什么区别么,都是可以运行的呀

正在回答

3 回答

不加括号代表默认初始化(default initialize),类型后加上空括号代表值初始化(value initialize)。

对于有构造函数的类,这两种形式都是调用其默认构造函数。没有区别。

但对于built-in类型,由于没有默认构造函数,所以默认初始化会导致初值未定。而值初始化则一般会初始化为0。

1 回复 有任何疑惑可以回复我~

一些string类型的字符串. 他们不是初始化null的么

0 回复 有任何疑惑可以回复我~

意思就是在对于有构造函数的类 加与不加()都是没关系的;

而对于没有构造函数的类,

加()会初始化对象的值,也就是String = null,int/float/double = 0,

不加()则不会,值就会随编译器而定;

这样理解对么?

0 回复 有任何疑惑可以回复我~
#1

onemoo

是的,对类来说是调用默认构造函数,而对于 int float double 来说,加上()确实是初值为0,不加的话,初值是随机的。 不过你说的String是什么意思?
2015-07-22 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C++远征之封装篇(上)
  • 参与学习       103381    人
  • 解答问题       732    个

封装--面向对象的基石,本教程力求帮助小伙伴们即学即会

进入课程

堆中声明的疑问

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号