【问题标题】:Should I use a reference?我应该使用参考吗?
【发布时间】:2016-02-19 08:02:29
【问题描述】:

我有一个包含实现指针的类。因此,在某些函数中,我多次引用一个成员的实现。写是不是个好主意

// 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 做同样的事情?

【问题讨论】:

  • ... 或者使用后者并将其余的留给编译器。如果这些方法能编译成不同的代码,我会感到惊讶。使用任何你觉得更易读的东西。
  • 方法3:return m_pImpl->GetBlablabla();

标签: c++ performance micro-optimization


【解决方案1】:

不要尝试做现代编译器的工作,因为他们非常重视代码优化:回避诸如此类的所谓改进技巧。

它不仅会混淆,而且方法 1 也容易受到错误的重构器的攻击以及程序行为未定义!正是由于这些原因,我不允许在我的代码库中使用方法 1。

【讨论】:

    【解决方案2】:

    来自 8.3.2 参考文献 §4

    未指定引用是否需要存储

    所以我建议使用对你来说更易读的代码,其余的留给编译器。

    【讨论】:

      猜你喜欢
      • 2020-01-02
      • 1970-01-01
      • 2010-10-08
      • 1970-01-01
      • 1970-01-01
      • 2020-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多