0

可能重复:
C++ 初始化列表

class Base
{
public:
int m_nValue;

Base(int nValue=0)
    : m_nValue(nValue)
{
}
};

在这段代码中,构造函数是否正在初始化m_nvalue成员变量?我不确定这种语法:

Base(int nValue=0) : m_nValue(nValue) {}

我们通常写成:

Base(int nValue) { m_nValue = nValue;}

有人可以解释 C++ 的上述语法吗?

4

3 回答 3

3

这个语法:

Base(int nValue=0)
: m_nValue(nValue)

称为成员初始值设定项。它将使用给定的 nValue 初始化 m_nValue。这种语法在 C++ 中通常是首选,因为它在构造函数的主体之前执行。

于 2013-01-19T01:10:37.093 回答
1

它被称为成员初始化列表。

成员初始化器列表由逗号分隔的初始化器列表组成,其前面有一个冒号。它位于参数列表的右括号之后和函数体的左括号之前

从概念上讲,这些初始化发生在对象创建时和括号内的任何代码执行之前。

注意:您不能将成员初始化器列表语法与构造函数以外的类方法一起使用。

于 2013-01-19T01:15:18.900 回答
0

在代码中初始化变量的方式称为成员初始化器列表。通常我们使用这样的列表来初始化const 成员变量(正常 - 非 const 也是),因为在构造时我们可以给 const 变量一些值。

第二种初始化类型基本上是一个普通的参数化构造函数。当您拥有一个对象并且在创建您想要初始化成员变量的对象时使用它。

于 2013-01-19T02:53:46.283 回答