众所周知,Qt类在传递值时会使用copy-on-wite。所以在需要之前不要复制。当我只需要对对象进行只读访问时,我已经多次看到通过const引用传递Qt类。如果两种情况都没有复制,人们为什么会通过const QString&
而不是简单QString
?
答案 0 :(得分:9)
这是因为魔法需要付出代价。 QString不复制整个字符串,但它会计算引用。许多QString副本可能会降低程序的速度。如果const QString&
足以满足您的需求,为什么不使用它?它仍然更快。
答案 1 :(得分:6)
写入时复制并不意味着,该对象不会被复制。这只意味着深拷贝将在写入时进行,即实际的数据将在写入时被复制。制作副本的主要复杂性当然是 data 复制。但只是制作浅层副本涉及一些操作,如引用计数。
结果,通过引用传递仍然比制作浅层复制更便宜。