2014-02-14 46 views
1

STL的(人)的for循環範圍內最近的提議隱式汽車& &讓我不知道它的正確方法迭代和修改序列的元素自動&或自動&&優選用於基於範圍的foor循環修改範圍?

for(auto&& elem: cont) 
{ 
} 

for(auto& elem: cont) 
{ 
} 
+0

或者[適用於基於範圍的聲明的適當樣式](http://stackoverflow.com/questions/9994789/proper-style-for-declaration-基於範圍的-for) – MatthiasB

+0

右值引用是一個正常引用,它也可以綁定到temporary_。你看到一個臨時? – Damon

回答

0

有不是「適當」的東西;這取決於您正在迭代的內容以及您想要對每個迭代進行的操作。

1

兩者相當;在第一種情況下,「參考摺疊」意味着elem的類型變爲左值參考,因爲它的初始值是左值。我會說第二個更「正確」,因爲它表達了實際發生的事情。

(除非像在重複的回答中指出,集裝箱突破容器要求std::vector<bool>確實,有reference類型實際上不是引用類型。在這種情況下,首先會結合elem到一個臨時而第二個則不會編譯)。

+0

http://stackoverflow.com/a/13130795/700825 – NoSenseEtAl

+0

@NoSenseEtAl:足夠公平,我沒有考慮像'std :: vector '這樣的不符合標準的容器。 –

+0

關於矢量 http://blogs.msdn.com/b/vcblog/archive/2013/06/28/c-11-14-stl-features-fixes-and-breaking-changes-in-vs-2013。 aspx和技術上的矢量不是一個容器,雖然我確定你知道... http://www.gotw.ca/gotw/050.htm – NoSenseEtAl