C++ 构造函数中成员的初始化

C++ 构造函数中成员的初始化,c++,C++,可能重复: 在此代码中,构造函数是否正在初始化成员变量? 我不确定这种语法: Base(int nValue=0) : m_nValue(nValue) {} Base(int nValue=0) : m_nValue(nValue) 我们通常写为: Base(int nValue) { m_nValue = nValue;} 可以解释C++的上述语法吗?< P>这种语法: Base(int nValue=0) : m_nValue(nValue) {} Base(int nValue

可能重复:

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

Base(int nValue=0) : m_nValue(nValue) {}
Base(int nValue=0)
: m_nValue(nValue)
我们通常写为:

Base(int nValue) { m_nValue = nValue;}

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

< P>这种语法:

Base(int nValue=0) : m_nValue(nValue) {}
Base(int nValue=0)
: m_nValue(nValue)
被称为成员初始值设定项。它将用给定的nValue初始化m_nValue。这个语法通常是C++中的首选,因为它是在构造函数的主体之前执行的。

这个语法:

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

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

它被称为成员初始化列表。 成员初始值设定项列表由一个逗号分隔的初始值设定项列表组成,该列表前面有一个冒号。它放在收盘后 参数列表的括号和函数体的左括号之前

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

注:
不能将成员初始值设定项列表语法用于构造函数以外的类方法。

它称为成员初始值设定项列表

成员初始值设定项列表由一个逗号分隔的初始值设定项列表组成,该列表前面有一个冒号。它放在收盘后 参数列表的括号和函数体的左括号之前

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

注:
不能将成员初始值设定项列表语法用于构造函数以外的类方法。

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


第二类初始化基本上是一个正常的参数化构造函数。当您拥有一个对象,并且在创建对象时,您希望初始化成员变量时,使用该方法。

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


第二类初始化基本上是一个正常的参数化构造函数。当您拥有一个对象,并且在创建对象时,您希望初始化成员变量时,将使用该方法。

无论“我们”是谁,通常用第二种方法写入,都是错误的。对于基元类型,它们是等价的,但是对于类类型,第二种方法首先默认初始化变量,然后将新值复制到它们中,这(a)增加了一个不必要的要求,即类型是默认可初始化的,(b)更慢,(c)使异常保证更难编写。
我们通常以
不,我们不知道“我们”是谁通常编写的,第二种方式是错误的。对于基元类型,它们是等价的,但是对于类类型,第二种方法首先默认初始化变量,然后将新值复制到它们中,这(a)增加了一个不必要的要求,即类型是默认可初始化的,(b)更慢,(c)使异常保证更难编写。
我们通常将其编写为
不,我们不感谢!。。你是对的!。。。太好了。有时候,初始化具有复杂类型的成员变量的唯一方法就是这样。@ta.speot.is是的,这是一个很好的观点。这就是为什么我们更喜欢初始化列表。@ta.speot.is和引用。@Song:成员初始值设定项。C++11具有完全无关的初始化列表。谢谢!。。你是对的!。。。太好了。有时候,初始化具有复杂类型的成员变量的唯一方法就是这样。@ta.speot.is是的,这是一个很好的观点。这就是为什么我们更喜欢初始化列表。@ta.speot.is和引用。@Song:成员初始值设定项。C++11具有完全无关的初始化列表。