的方法之间的差异请考虑构造的对象的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();'是一个函数声明? –