C++对象初始化无非是利用构造函数来初始化。
构造函数初始化成员变量的方式有两种:在构造函数内部赋值和成员初始列表。
这两种方式在初始化内置类型时从效率角度来看区别不大,但是如果成员是对象的话,区别就来了,前者是先调用缺省构造函数产生对象再调用赋值操作符来完成初始化,而后者是直接对调用对象的拷贝构造函数函数完成初始化。
此外,对于const和引用修饰的成员变量,只能用成员初始列表来完成初始化。
对象成员变量初始化的顺序取决于类中的成员变量的声明顺序,而与成员初始化列表中的顺序无关。
如果用了成员初始列表初始化,最好对象的所有成员变量都在成员初始化列表中初始化,包括内置类型,否则将会导致不确定值。
当然,如果内置类型成员变量很多,而且构造函数不只一个,也可以将这些变量拆分出来放在一个单独的私有函数中,而在各构造函数中调用该函数,这样能代码更优雅点。
类的静态成员变量,则在类的源文件的首部用“类::静态成员变量=值”来初始化。
总之,规则是死的,但应用必须灵活。
阅读(3005) | 评论(1) | 转发(0) |