请教一下吧友,类对象作为局部变量也不会进行默认初始化吗?
c语言吧
全部回复
仅看楼主
level 5
怒人水瓶
楼主
我在vs上,它直接提示未初始化,我记得内置类型作为局部变量不会默认初始化,但是类会调用默认构造函数吧
2022年10月11日 12点10分
1
level 5
怒人水瓶
楼主
gcc上能够通过,但是类成员都是垃圾值
2022年10月11日 12点10分
2
level 5
怒人水瓶
楼主
难道说对于默认构造函数,成员如果是内置类型,系统给予垃圾值,如果成员是自定义类型,则调用该类型的默认构造
2022年10月11日 12点10分
3
吧务
level 14
GTA小鸡
TestH t;
这样写t是默认初始化,所谓默认初始化就是没有初始化。要对t执行值初始化,加一个初始化列表,写成TestH t{};。这样t.i将被初始化为0。
2022年10月11日 13点10分
4
怒人水瓶
大佬,牛哇
2022年10月11日 13点10分
level 5
怒人水瓶
楼主
如楼上的大佬所说,原来TesH t 不等于 TesH t{}
2022年10月11日 13点10分
5
level 11
钱欢银
你的构造函数并没有给成员初始化
2022年10月11日 13点10分
6
钱欢银
除了鸡哥说的那样可以,你构造函数=default,还需要搭配这个: public: int i{}; int x[5]{}; 就可以了
2022年10月11日 13点10分
怒人水瓶
@钱欢银
嗯嗯,这个可以,之前我就喜欢这么写,声明成员变量的时候给个默认值,
2022年10月11日 14点10分
吧务
level 14
GTA小鸡
另外要注意TesH() =default和空构造函数TesH() {}的区别,前者是非用户提供的构造函数,而后者是用户提供的,这将导致前者执行值初始化而后者执行默认初始化。这意味着如果你定义构造函数为TesH() {},然后定义变量TesH t{},那t.i还是没被初始化。
2022年10月11日 13点10分
7
怒人水瓶
受教了,一会儿回去测试一下
2022年10月11日 13点10分
level 5
怒人水瓶
楼主
这个是自己写的空白无参构造,5楼是系统的默认构造
2022年10月11日 14点10分
8
level 5
怒人水瓶
楼主
这种情况下TesH t{}和TesH t的效果一样
2022年10月11日 14点10分
9
1