【问题标题】:Performance of constant references over non-constant references常量引用相对于非常量引用的性能
【发布时间】:2012-09-14 09:38:26
【问题描述】:

在 C++ 中使用常量引用和非常量引用时性能是否存在差异?如果是,那么哪个更好,为什么?

SystemC 手册中有一条声明,通过非常量引用传递对象是一种快速的解决方案。

【问题讨论】:

  • const-referencenon-const-reference 在不同的情况下使用。当你有保证时,你的函数对象不会被改变——使用const-refenrence,如果你想要改变——使用reference
  • 我知道用法,我想知道其中一个在性能方面是否比其他更好。

标签: c++ performance compiler-construction compiler-optimization


【解决方案1】:

不,根本没有区别。 const 仅适用于本地,但任何最近的编译器都可以轻松确定引用是否已更改,因此没有区别。

考虑这种情况:

void MyClass::foo(const int& param)
{
    m_myInt1 = param + 1;
    m_myInt2 = param;
}

在这两种情况下,对param 的每次访问都必须经过内存。为什么?因为param 可能是m_myInt1 的别名。

MyClass bar;
bar.foo(bar.m_myInt1);

const 引用仅意味着不能通过该引用修改param。您仍然可以通过其他一些参考来修改它(在本例中,通过 this->m_myInt1)。

【讨论】:

  • 我要补充一点:如果您将 const 引用传递给函数,编译器将更容易内联其主体,因为它不必处理别名和对象重新分配。
  • @UnknownGosu:即使引用是const,该函数也可以使用const_cast对其进行修改,因此编译器不能基于它是const进行任何额外的假设。跨度>
猜你喜欢
  • 2019-02-05
  • 2011-06-09
  • 1970-01-01
  • 2017-09-18
  • 2016-07-18
  • 1970-01-01
  • 2020-07-06
  • 2014-03-03
  • 2011-05-31
相关资源
最近更新 更多