使用const CString&代替CString作为函数参数是否对性能有好处?

时间:2019-01-07 18:00:40

标签: c++ c++11 const

我有一个以CString作为参数之一的函数,我在代码库中浏览,很多地方都以const CString&作为参数。

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

2 个答案:

答案 0 :(得分:1)

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

如果我们谈论的是MFC / ATL CString,则其复制构造函数不会执行像std::string那样的深层复制(复制的确可能会非常昂贵,因为通常情况下,它需要新的分配和完整内容的副本),因为它实现了“写时复制”优化-给定CString的副本实际上共享后备缓冲区,直到其中一个尝试修改它,从而触发实际副本。因此,副本相对便宜,但它们仍涉及原子整数摆弄,在现代处理器上可能并非完全免费。

因此:很可能const引用的传递速度会稍快(尽管由于额外的间接步骤,对函数内部实际数据的访问将略有困难),但这不是我所需要的除非剖析确实显示它是瓶颈,否则我真的会担心。

答案 1 :(得分:-1)

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

这是因为引用在所有主要编译器中均作为指针实现,并且通过值或指针传递琐碎的数据类型(例如char*)没有区别,因为在汇编级将参数传递给函数都是一样的sizeof(char*) == sizeof(char**)