2016-11-02 65 views
2

我期待着the mongocxx query exemples,我不明白在這裏使用auto&&而不是auto&mongocxx遊標和右值引用

auto cursor = db["restaurants"].find({}, opts); 
     for (auto&& doc : cursor) { 
      std::cout << bsoncxx::to_json(doc) << std::endl; 
} 

documentation,他們用這種方式:

mongocxx::cursor cursor = collection.find(document{} << finalize); 
for(auto doc : cursor) { 
    std::cout << bsoncxx::to_json(doc) << "\n"; 
} 

我想用for(auto& doc : cursor)

什麼是最好的做法在這裏,爲什麼?

回答

2

在該位:

for (auto&& doc : cursor) 
... 

「範圍表述」「範圍」可以返回temporary

這是一個「最佳實踐」在此處使用右值引用(使用auto時)。

看一看此: http://en.cppreference.com/w/cpp/language/range-for

引用:

如果range_expression返回一個暫時的,它的壽命被延長,直到循環的結束時,通過結合到右值參考__range所示但請注意,range_expression中任何臨時的生命週期不會延長。

而且這樣的:

http://www.artima.com/cppsource/rvalue.html

報價:

右邊的值參考的行爲類似,只是它可以綁定到一個臨時(右值)左值的參考,而你不能將一個(非const)左值引用綁定到右值。