重复的初始化代码
考察下面的代码:
enumLineStyle{
lsSolid,
lsDash,
lsDot,
};
classRect
{
public:
Rect()
:left{0},top{0},right{0},bottom{}
,style{lsSolid}
{
}
Rect(intl,intt,intr,intb)
:left{l},top{t},right{r},bottom{b}
,style{lsSolid}
{
}
Rect(intl,intt,intr,intb,LineStylels)
:left{l},top{t},right{r},bottom{b}
,style{ls}
{
}
private:
inttop;
intleft;
intright;
intbottom;
LineStylestyle;
};
这是正常不过的代码,但是有一个不算是问题的问题:初期值为缺省值的数据包成员也需要在构造函数里指定,感觉不好。
类内初始化
C++11中引入了类内初始化器,以减少构造函数和初始化代码的数量。说起来挺玄,其实就是下面代码中背景加亮的部分。
classRect
{
public:
Rect(intl,intt,intr,intb)
:left{l},top{t},right{r},bottom{b}
{
}
Rect(intl,intt,intr,intb,LineStylels)
:left{l},top{t},right{r},bottom{b}
,style{ls}
{
}
private:
inttop{0};
intleft{0};
intright{0};
intbottom{0};
LineStylestyle{lsSolid};
};
类内初始化之后,构造函数只需要负责和缺省值不同的部分就好,代码精炼很多了。
作者观点
有人说,改善都是懒人发起的,作者认为:有一部改善应该是强迫症发起的。
觉得本文有帮助?请分享给更多人。