的方法之間的差異請考慮構造的對象的3種方式:什麼是構造物體
1)
LogTreeItem::LogTreeItem(const QList<QVariant>& data, LogTreeItem* parent) :
m_parentItem {parent}, m_itemData {data}
{
}
2)
LogTreeItem::LogTreeItem(const QList<QVariant>& data, LogTreeItem* parent) :
m_parentItem (parent), m_itemData (data)
{
}
3 )
TreeItem::TreeItem(const QList<QVariant> &data, TreeItem *parent)
{
m_parentItem = parent;
m_itemData = data;
}
它們100%相等嗎?如果不是,他們在哪裏有區別?每種方法有哪些優勢/劣勢?
我猜測的拷貝賦值一些東西,移動的構造函數或現代C++ 11及以後的一些先進的東西在1例和2
第一個構造函數在沒有初始化列表的情況下會使用列表初始化,這將防止任何縮小轉換 - 如果成員的類型比參數 –
更窄,則將無法編譯儘管用戶沒有提到它,在沒有收到任何參數的情況下討論()vs {}可能會有所幫助,因爲這對於聚合類型和基元是非常重要的區別。 –
@NirFriedman:至少在ctor-initializer列表中,'x {}'和'x()'都會導致值初始化。也許你正在考慮語句,其中'X x {};'是帶有支撐初始值設定項的對象聲明,但是'X x();'是一個函數聲明? –