加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 我应该使用参考吗?

发布时间:2020-12-16 10:01:49 所属栏目:百科 来源:网络整理
导读:我有一个包含实现指针的类.因此,在某些功能中,我多次提到实现的成员.写作是个好主意 // approach 1std::string str = m_pImpl-m_str;str.clear();str += "blablabla";// ...return str.c_str(); 一次并使用引用保存指针间接,或者我应该保存引用变量(这总是4
我有一个包含实现指针的类.因此,在某些功能中,我多次提到实现的成员.写作是个好主意

// 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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读