读取未初始化的值会导致正确的结果。
主要看看类和结构体的初始化。
class A
{
public:
A(string strname)
{
m_name = strname;
}
~A(){}
private:
string m_name;
}
这样写没错,能完成对象的初始化工作。但在构造函数中完成的不是初始化动作,是赋值动作。
c++规定,对象成员初始化,发生在进入对象构造函数体之前。所以,以上的动作不是在初始化,而是在赋值。
最佳的初始化做法是:使用初始化列表。
class A
{
public:
A(string strname):m_name(strname)
{
}
~A(){}
private:
string m_name;
}
这样做也完成了对对象成员的初始化,但是效率通常更高一些。上一个版本,在进入构造函数之前就已经对m_name进行了初始话。在进入函数体后又对其赋值。也就是说,之前的初始化完全是在做无用功。
原文链接: https://www.cnblogs.com/mcran/archive/2012/01/14/2322253.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/40199
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!