先看一段简单的代码吧:#includeusingnamespacestd;structCLS{intm_i;CLS(inti):m_i(i){}CLS(){CLS(2);}};intmain(intargc,char*argv[]){CLSobj1;cout
2 回答
慕少森
TA贡献2019条经验 获得超9个赞
1、你在构造函数中调用了另一个构造函数,实际上只是创建了一个匿名的临时变量!而不是像你想象中的那样!2、如果写成CLSobj1();那就是一个函数声明!3、你在构造函数中没有显式对成员变量进行初始化或者赋值,所以m_i的结果是未定义的!
炎炎设计
TA贡献1808条经验 获得超4个赞
1.这才是符合你预期的写法,至于你的写法为什么是错的,原因是因为你写错了,详见各种入门书籍。CLS():CLS(2){}2.因为有歧义,至于具体为什么不能这么写,因为这是规定。leunggamciu回复jollywing:因为有歧义!这样就没问题:CLSobj1=CLS();3.这是未定义行为,不同的编译器有不同的结果。至于为什么是未定义行为,个人猜测是为了保证可移植性。
添加回答
举报
0/150
提交
取消