既然构造函数初始化列表和构造函数体内赋值都可以对成员变量赋值,那么二者有何区别,是不是二者等效呢?
一、若类的数据成员是静态的(const)和引用类型,必需用初始化列表
静态(const)的数据成员只能初始化而不能赋值,同样引用类型也是只可以被初始化,那么只有用初始化列表。
如:
#include <iostream>
#include <string>
using namespace std;
template<class t>
class namedptr {
public:
namedptr(const string& initname, t *initptr);
private:
const string name; //静态数据成员的初始化必需用初始化列表
t * const ptr;
};
template<class t>
namedptr<t>::namedptr(const string& initname, t *initptr )
: name(initname), ptr(initptr)
{}
//第二种方法是在构造函数体内赋值:
//template<class t>
//namedptr<t>::namedptr(const string& initname, t *initptr)
//{
// name = initname;
// ptr = initptr;
//}
int main()
{