2015-11-19 62 views
1

是否在運行時成本中聲明參考結果?聲明參考的C++代價?

Typename a;  
auto& b=a; 
func(b); 

在循環中聲明一個引用會導致多次運行時成本嗎?

Typename a=Typename();//default constructor 
for(int i=0;i<100;i++) 
{ 
    auto& b=a; 
    func(b); 
} 

或者

Typename a=Typename();//default constructor 
auto& b=a; 
for(int i=0;i<100;i++) 
{ 
    func(b); 
} 
更好

+1

生成彙編代碼。其次,現在編譯器優化技術非常出色。編譯器將知道如何優化該循環(至少它應該能夠)。 – PaulMcKenzie

回答

0

在引擎蓋下面,引用通常是使用指針實現的 - 因此可能會產生額外的成本(指針的內存成本以及去引用操作的運行時成本)。但是,如果引用僅用作本地別名(正如您在此處所做的那樣),編譯器就可以完全優化這一點。

此行爲雖然可以取決於您的編譯器和優化設置。對於您的具體示例:使用GCC 5.2,禁用了優化,循環內的引用會生成額外的解除引用操作。但是,只要您打開優化,它們都會生成相同的輸出。

+2

_「在引擎蓋下面,引用是使用指針」_ - 並非總是實現的。通常將本地參考視爲別名,並且應該具有零成本。 –

+0

@CaptainObvlious好點,會更新來指定這個。 – ajshort