我应该使用参考吗?
Should I use a reference?
我有一个包含实现指针的类。因此,在某些函数中,我多次引用实现的成员。写是个好主意吗
// 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 做同样的事情?
不要试图做现代编译器的工作,因为他们非常重视代码优化:回避诸如此类的改进技巧。
它不仅令人困惑,而且方法 1 也容易受到错误的重构器的影响,在 str
的定义中丢弃&
:如果这样做,那么返回的指针将悬空并且程序行为未定义!正是由于这些原因,我不允许在我的代码库中使用方法 1。
来自 8.3.2 引用 §4
未指定引用是否需要存储
因此,我建议使用对您来说更具可读性的代码,其余的留给编译器。
相关文章:
- 我应该使用什么来代替void作为变体中的替代类型之一
- boost::asio::steady_timer()与sleep()我应该使用哪一个
- 我应该实现右值推送功能吗?我应该使用std::move吗
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 我应该删除矢量<short>吗?
- 我应该如何修改此代码以使用给定字符串中的字母打印菱形图案
- 我应该在锁定TBitmap画布后解锁它吗
- 为什么我应该在异常处理中使用std::cerr而不是std::cout
- 我应该避免多重实现继承吗
- 为了方便起见,我应该避免公开私有字段变量吗
- 我收到同义重复编译器错误。我应该如何修复"类型"X"的参数与类型"X"的参数不兼容?
- 违反const正确性:我应该现实地期待什么问题
- 我应该如何表示我拥有的连续元素序列?
- 转发模板参数的const-度,我应该使用转发参考
- C 超载相等运算符.我应该写自己的功能以接受通过参考或值传递的参数
- 我应该始终处理参考返回矢量吗?
- 明确给出该数字时,我应该参考std ::向量大小
- 在这种情况下,我应该使用参考成员吗
- 我应该使用参考吗?
- 我应该发送std::set函数与参考或不