gpt4 book ai didi

c++ - 什么时候对象足够大以至于通过引用而不是通过值传递它可以提高性能?

转载 作者:可可西里 更新时间:2023-11-01 16:32:26 25 4
gpt4 key购买 nike

如本 question 中所回答by Charles Bailey pass by constant reference 当对象类型很大但什么样的对象才算大?

编辑:好的,为了提供更多可用于提供更具体答案的数据,我决定在此描述中添加一个真实世界的问题。

假设我们有这样一个对象:

typedef struct dipl {
quint16 __id;
quint16 __pos;
quint16 __len;
} data;

我们还有一个这样的对象:

class bidipl
{
public:
bidipl();
quint8 id();
void setid(quint8 __id);
void appenddipl(dipl __dipl);
private:
qint8 _M_id;
dipllist _M_dipllist;
};

在哪里dipllisttypedef QList<dipl> dipllist; .对象 diplbidipl创建一次,但每分钟访问可能超过 100 次。那我们应该怎么传dipl呢?到我们的追加函数?

void appenddipl(dipl __dipl);

或者

void appenddipl(const dipl& __dipl);

最佳答案

按值传递对象有两个独立的成本:复制数据表示和执行构造函数。您需要考虑两者的成本。

  • 复制数据通常很快,但要保持在合理范围内。传 struct { int[7]; 就可以了} 按值计算,但对于 struct { int[20000]; 可能没有那么多; .

  • 执行构造函数可能会进行动态分配,这会带来异常风险和同步成本。这可能可以忽略不计,也可能很重要。这取决于。

您应该无条件地按值传递的唯一变量是那些字大小的内置类型。对于其他一切,您应该考虑权衡取舍。

关于c++ - 什么时候对象足够大以至于通过引用而不是通过值传递它可以提高性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25273958/

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