第一种方式叫做初始化列表,与第二种情况相比会少一次默认构造。基本上就相当于下面两种情况的区别:
1. int i = x;
2. int i; i = x;
如果就例子中的两个int型成员变量而言,差异的确不大。但如果初始化的不是基本类型,且构造函数必须有参数的情况下就必须使用初始化列表。另外,引用,const类型(非static)成员变量,也都必须在初始化列表中继续初始化。
例如:
class T
{
public:
T(int v){}
};
class F
{
public:
F(int& v)
: m_t(1)
, m_i(2)
, m_ri(v)
{
}
private:
T m_t;
const int m_i;
int& m_ri;
}
很负责任地告诉你,没区别
有区别么?一样的吧