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具有完全无关的初始化列表。