使用 const CString& 而不是单独使用 CString 作为函数参数是否有任何性能优势?



我有一个函数,它将CString作为参数之一,我正在查看代码库,许多地方都将const CString&作为参数。

所以我想知道使用CStringconst CString&之间是否存在性能或行为差异?

传递C++非平凡类的值涉及调用复制构造函数,因此从性能角度来看,决策取决于它的作用。

如果我们谈论的是MFC/ATLCString,它的复制构造函数不会像std::string那样执行深度复制(复制成本可能确实很高,因为在一般情况下,它需要新的分配和完整内容的副本),因为它实现了"写时复制"优化-给定CString的副本实际上共享备份缓冲区,直到其中一个副本试图修改它,从而触发实际拷贝。出于这个原因,副本相对便宜,但它们仍然涉及一些原子整数篡改,这在现代处理器上可能不是完全免费的。

所以:很可能const引用的传递速度会稍快一些(尽管由于额外的间接步骤,对函数内部实际数据的访问会受到一些影响),但这并不是我真正担心的事情,除非分析确实显示它是一个瓶颈。

通常不会。一个好的编译器&优化器应该生成相同的程序集。

这是因为引用在所有主要编译器中都是作为指针实现的,通过值或指针传递诸如char*之类的琐碎数据类型没有什么区别,因为在汇编级,传递给函数的参数是相同的,即sizeof(char*) == sizeof(char**)

最新更新