6

众所周知,Qt 类在按值传递时使用copy-on-wite。因此,直到需要时才完成复制。当只需要对对象进行只读访问时,我已经看到很多次通过 const 引用传递 Qt 类。如果在这两种情况下都没有复制,为什么人们会通过const QString&而不是简单?QString

4

2 回答 2

10

这是因为魔法是有代价的。QString 不会复制整个字符串,但它会计算引用。多次复制 QString 会减慢程序的速度。如果const QString&足以满足您的需求,为什么不使用它?它仍然更快。

于 2013-06-12T17:27:57.857 回答
7

写时复制并不意味着该对象不会被复制。这只意味着在写入时将进行深度复制,即在写入时将复制实际数据。制作副本的主要复杂性当然在于数据复制。但是仅仅做一个浅拷贝就涉及到一些操作,比如引用计数。

结果,通过引用传递仍然比浅拷贝更便宜

于 2013-06-12T17:29:45.157 回答