2013-06-12 77 views
2

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

回答

6

这是因为魔术带有价格。 QString不会复制整个字符串,但会计算引用。许多QString的拷贝可能会减慢程序速度。如果const QString&足够满足您的需求,为什么不使用它?它仍然更快。

3

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

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