通过const引用传递Qt类

Passing Qt classes by const reference

本文关键字:Qt const 引用 通过      更新时间:2023-10-16

众所周知,Qt类在传递值时使用写入复制。所以只有在需要的时候复制才会完成。我见过很多次通过const引用传递Qt类,当只需要对对象进行只读访问时。为什么人们传递const QString&而不是简单的QString如果两种情况下都没有复制?

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

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

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