2.2.14“因为类类型的数据成员对象在进入函数体是已经构造完成”,应该说创建类对象时会从构造函数进入,进入前不会对类中的类对象成员进行构造,进入后是先处理函数接的初始化列表,像这里先检查到a(1)同时也会知道a是一个类对象成员故编译器会优化,直接调用一个有参的构造函数对a进行初始化,进入函数体内如果用到b编译器会优化,先调用无参构造函数来构造b再使用(显然在函数体内只能使用b而无法写b(),b(2)来构造b),函数体内如果没用到b则在构造函数结束前会调用无参构造函数来构造b,所以如果A类没有无参构造函数并且B类中的A对象也没有在初始化列表中用有参构造进行初始化则会出错。“那么首先调用默认的构造函数,要调用2次,所以不推荐在构造函数内初始化”,这里“调用默认的构造函数”是因为你写了b = A(2)用到了b对象所以要先构造,“然后调用指定的构造函数”是因为A(2)创建匿名对象是调用有参构造函数。
点赞

相关推荐

牛客网
牛客企业服务