各位大神,有个不太明白的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)
{
}