在QString构造函数和其他函数中,QChar通过值传递,而不是通过const ref:QString(QChar ch)传递,但是它本身是一个类(class QChar),而不是POD类型。为什么这样通过?
最佳答案
Qt 5.6.2中的QChar
类只有一个数据成员unsigned short
。因此,sizeof(QChar)
在大多数平台上将是2
。它比通常的指针小(通常为4或8个字节)。
因此,您可以将QChar
与其他任何基本类型一样对待。实际上,它被设计为以这种方式工作,因为它替代了Qt API中的char
。
传递const ref的原因是效率,并且对于大型对象而言是完全合理的。在这些情况下,传递值将意味着复制昂贵。因此,您可以用它来换取一个附加的间接寻址(因为在后台通常使用指针来实现引用),并且效果更好。对于基本类型,推理不成立。复制很便宜,因此按值传递更有效,避免了间接的添加。