gpt4 book ai didi

c++ - 构造对象的方法有什么区别

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:21:11 25 4
gpt4 key购买 nike

考虑构造对象的 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% 相等吗?如果不是,它们有什么不同?与每种方法相关的优点/缺点是什么?

我猜测在 1 和 2 的情况下,一些关于复制赋值、移动构造函数或现代 c++11 及更高版本中的一些高级事情正在完成。

最佳答案

对于大多数类型,第一个和第二个会做同样的事情。但是,对于具有接受 std::initializer_list 的构造函数的类型,第一个会更喜欢它,而第二个会更喜欢普通的构造函数。经典示例是带有两个参数的 std::vector -- 它们是要放入 vector 中的两项,还是一项具有重复计数的项。

第三个版本根本不控制构造。正如 Mateusz 正确指出的那样,默认构造函数用于创建对象,然后通过赋值提供值。在很多类型上,有些参数只能在构造时设置,赋值时不能改变,这种方法根本行不通。还要考虑必须在构造时绑定(bind)的引用和必须使用其最终值构造的 const 成员,因为赋值被禁用。

关于c++ - 构造对象的方法有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46589468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com