我应该使用参考吗?

时间:2016-02-19 08:02:30

标签: c++ performance micro-optimization

我有一个包含实现指针的类。因此,在某些功能中,我多次提到实现的成员。写

是个好主意
// approach 1
std::string & str = m_pImpl->m_str;
str.clear();
str += "blablabla";
// ...
return str.c_str();

一次使用引用保存指针间接,或者我应该保存引用变量(这总是4或8个字节,就像一个指针,对吗?)?

// approach 2
m_pImpl->m_str.clear();
m_pImpl->m_str += "blablabla";
// ...
return m_pImpl->m_str.c_str();

在我的用例中,变量m_pImpl-> m_str使用了大约10到20次。恐怕我几乎无法描述这两种方法之间的性能差异。有人知道或者任何人测试它会有所作为吗?这取决于我使用变量的频率(一次相对于20次而不是10000次)?或者一个体面的编译器是否与方法1做同样的事情?

2 个答案:

答案 0 :(得分:4)

不要尝试使用现代编译器,因为他们非常重视代码优化:回避那些声称的改进技巧。

不仅是混淆,而且方法1也容易受到错误的重构者在&的定义中删除str的影响:如果这样做,则返回的指针将悬空和程序行为 undefined !由于这些原因,我不允许在我的代码库中使用方法1。

答案 1 :(得分:3)

从8.3.2参考文献§4

  

未指明引用是否需要存储

所以我建议使用看起来更具可读性的代码,并将剩下的代码留给编译器。