2017-07-16 80 views
3

很多時候,我看到這樣的代碼:基於範圍的循環中的通用參考用法有什麼好處?

template<typename Collection> 
void Foo(Collection&& c) 
{ 
    for (auto&& i : std::forward<Collection>(c)) 
    // do something with i 
} 

對於所有的STL容器(除vector<bool>i有左值引用類型。在這種情況下輸入auto&&是否有實際意義?

回答

4

正如你所說,你沒有左值的完美例子是std::vector<bool>。使用auto&將不會編譯,因爲從迭代器返回一個prvalue。

此外,它發生在我身上的一些時間,使得它的迭代器沒有返回一個左值。

此外,使用auto&&的好處是,沒有任何情況下它不會工作。即使你有一個奇怪的情況,你的迭代器產生一個const rvalue引用,auto&&將綁定到它。

對於教學,還可以更容易地告訴「在for循環中使用auto&&」。因爲它不會在任何地方造成複製和工作。

有哪裏還提議允許隱auto&&並啓用語法for (x : range)(我不記得哪個是真的。如果你知道,請告訴我,在評論)

+0

*簡潔'for'循環*如果內存服務。 – Quentin

+0

該建議墜毀並燒燬。我沒有看到提及它的很多觀點。 –

相關問題