c++ 构造函数初始化赋值问题,下面列出两个函数请大神看看有什么区别??

class A{
int i,j;

A(int x = 0, int y = 0) : i(x), j(y){}

};
区别
class A{
int i,j;
A(int x = 0, int y = 0) {
i = x;

j = y;

}

};

第一种方式叫做初始化列表,与第二种情况相比会少一次默认构造。基本上就相当于下面两种情况的区别:
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;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-12-12
很负责任地告诉你,没区别
第2个回答  2012-12-12
有区别么?一样的吧
相似回答
大家正在搜