第2个回答 2012-02-27
C++新手关注的一个常见问题是使用初始化表和在构造函数内使用数据成员的赋值之
间有什么区别例如以下代码
inline Account::
Account( const char *name, double opening_bal )
: _name( name ), _balance( opening_bal )
{
_acct_nmbr = get_unique_acct_nmbr();
}
和
inline Account::
Account( const char *name, double opening_bal )
{
_name = name;
_balance = opening_bal;
_acct_nmbr = get_unique_acct_nmbr();
}
它们的区别是什么
两种实现的最终结果是一样的在两个构造函数调用的结束处三个成员都含有相同的
值区别是成员初始化表只提供该类数据成员的初始化在构造函数体内对数据成员设置值
是一个赋值操作区别的重要性取决于数据成员的类型。如果对于内置类型和或者复合类型的话,效率上没有多大的差别,但对于非内置类型的话还是很明显的。如果属于类的组合的情况下,用初始化列表的话只需调用一次拷贝构造函数,而在构造函数内进行对象的赋值操作的话,会先调用缺省构造函数一次,再调用operator=赋值函数一次,由此可见效率的差别