Rumah > Soal Jawab > teks badan
各位大神,有个不太明白的C++语法 :
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
}
这语法里面 函数参数后面 : QWidget(parent) 是什么意思呢 不太明白了?
迷茫2017-04-17 13:08:58
这是成员初始化列表(Member Initializer List),它的用途是当QWidget* parent这个参数传入Widget的构造函数时,Widget类里的QWidget成员将以parent初始化,即QWidget(parent)。
使用成员初始化列表的好处是可以减少拷贝,例:
//假使QWidget的类型为SomeWidget
Widget::Widget(QWidget *parent) {
//QWidget = parent;//Wrong!这是一个赋值行为
QWidget = SomeWidget(parent);//Correct,但是QWidget被初始化了两次
};
这是因为C++规定,成员变量的初始化发生在进入构造函数之前,也就是QWidget这个成员
会在进入构造函数前被初始化,在这里是默认构造函数初始化的。所以上面代码中QWidget被
初始化了两次,外加 = 操作符(Assign Operator)被调用一次,这些操作开销是比使用成员
初始化列表高的。所以一般而言都尽量使用成员初始化列表。即:
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
}