赞
踩
构造函数分两个阶段执行:(1)初始化阶段; (2)普通的计算阶段。
计算阶段由构造函数函数体内的所有语句组成。初始化发生在计算阶段之前。
不管成员是否在构造函数初始化列表内显式初始化,类类型的成员总是在初始化阶段初始化。所以在初始化列表中对成员初始化,比在计算阶段对成员进行赋值要来得效率,因为即使没有显式的提供初始化列表,编译器也会隐式的对类类型成员进行初始化。
在构造函数列表中没有显式提及的每个成员,使用与初始化变量相同的规则进行初始化。
没有默认构造函数的类类型成员,以及const或引用类型的成员,不管是哪种类型,都必须在构造函数初始化列表中初始化。因为不管成员是否在构造函数初始化列表内显式初始化,类类型的成员总是在初始化阶段初始化。如果此时编译器找不到该类的默认构造函数就会报错。可以初始化const或引用对象,但是不能对他们进行赋值,所以初始化const或引用对象的唯一机会就是在构造函数的初始化列表,在执行构造函数体时,才对他们赋值时错误的。
类成员的初始化顺序与类定义中定义成员的顺序相同,与初始化列表中成员出现的先后次序无关。
将构造函数声明为explicit,可以防止编译器调用构造函数进行隐式的类型转换,但explicit只能在类定义体中声明,同样声明友元函数时的关键字friend也之能出现在类定义体中。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。