1

在C++中使用常量引用和非常量引用時性能有差異嗎?如果是的話,哪個更好,爲什麼?對非恆定引用的持續引用的性能

SystemC手冊中有一個聲明,非常量引用傳遞對象是一種快速解決方案。

+0

'const-reference'和'non-const-reference'在不同的情況下使用。如果你有保證,你的函數對象中的內容不會改變 - 如果你想改變,使用'const-refenrence' - 使用'reference'。 – ForEveR

+0

*你認爲什麼? –

+0

我知道使用情況,我想知道他們中的一個在性能方面是否比其他方面更好。 – Dexter

回答

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)。

+0

我會添加一個小記事:如果將const引用傳遞給函數,編譯器更容易將其內聯,因爲它不必處理別名和對象重新分配。 – UnknownGosu

+0

@UnknownGosu:即使引用是'const',函數也可以使用'const_cast'修改它,所以編譯器不能基於它是'const'做出任何額外的假設。 –