正如Charles Bailey在question的ojit_a中所回答的那样,当对象类型较大时,应考虑使用常量引用,但认为哪种对象较大?

编辑:
可以提供更多可以用于提供更具体答案的数据,我决定在此说明中添加一个现实世界的问题。

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

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传递给我们的append函数呢?
void appenddipl(dipl __dipl);

或者
void appenddipl(const dipl& __dipl);

最佳答案

应该考虑什么足够大以证明通过引用而不是按值传递?您会发现不同的答案:

  • 任何大于处理器上自然数据类型的东西(x86上为32位,x86-64上为64位):此处甚至std::pair<int, int>也应通过引用传递。


  • 仅将数据保存到动态内存位置的容器(例如vectorsstrings)

  • 我个人的喜好是:按值表示原始数据,按引用表示结构。

    通过对特定体系结构上的特定应用程序进行概要分析,您将找到唯一有效的答案。 谈论任何没有实际性能分析的性能都是徒劳的

    09-09 23:19
    查看更多