用初始化列表进行初始化 Point( int x, int y, string name ):_x(x),_y(y), _name(name){} _name会通过拷贝构造函数仅以一个函数调用的代码完成初始化 即使是一个很简单的string类型,不必要的函数调用也会造成很高的代价。随着类越来越大,越来越复杂,它们的构造函数也越来越大而复杂,那么对象创建的代价...
1包含常量成员,必须初始化列表进行初始化2包含引用成员,必须初始化列表进行初始化3包含成员类对象,并且有显示构造函数,必须要初始化列表进行初始化4继承于基类,并且基类有显示构造函数,必须要初始化列表进行初始化 实例: #include<iostream>using namespacestd;classWord{public: Word(int_id,constint_age,string_name...
冒号初始化与函数体初始化的区别在于: 冒号初始化是给数据成员分配内存空间时就进行初始化,就是说分配一个数据成员只要冒号后有此数据成员的赋值表达式(此表达式必须是括号赋值表达式),那么 分配了内存空间后在进入函数体之前给数据成员赋值,就是说初始化这个数据成员此时函数体还未执行。 对于在函数中初始化,是在所有...
对于类型1,在成员初始化列表和构造函数体内进行,在性能和结果上都是一样的 对于类型2,结果上相同,但是性能上存在很大的差别 因 为类类型的数据成员对象在进入函数体是已经构造完成,也就是说在成员初始化列表处进行构造对象的工作,这是调用一个构造函数,在进入函数体之后,进行的是 对已经构造好的...
第一种是通过在构造函数内赋值 class Point { public: Point(){ _x = 0; _y = 0;}; Point( int x, int y ){ _x = 0; _y = 0; } private: int _x, _y; }; 第二种是使用初始化列表 class Point { public: Point():_x(0),_y(0){}; ...
}//使用类成员列表//and constructor CString::CString(LPCTSTR)CMyClass::CMyClass() : m_str(_T("yada yada")) { } 在 它们之间有什么不同吗?是的。编译器总是确保所有成员对象在构造函数体执行之前初始化,因此在第一个例子中编译的代码将调用CString:: Cstring来初始化m_str,这在控制到达赋值语句前完...