2016-11-02 2 views
2

Ich war auf der Suche nach the mongocxx query exemples und ich verstehe nicht, was der Punkt der Verwendung auto&& über auto& hier ist.mongocxx cursor und rvalue referenzen

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

Im documentation, verwenden sie es auf diese Weise:

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

I for(auto& doc : cursor)

Was ist die beste Praxis hier, und warum verwenden?

Antwort

2

In diesem Bit:

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

Der "range Ausdruck" in "Bereich für" kann ein temporary zurück.

Es ist ein "best practice" zu verwenden Rvalue Referenz hier (bei der Verwendung).

Werfen Sie einen Blick auf diese: http://en.cppreference.com/w/cpp/language/range-for

Zitat:

Wenn range_expression eine temporäre zurückgibt, wird seine Lebensdauer bis zum Ende der Schleife verlängert, durch Bindung an den R-Wert Referenz __range wie angegeben Beachten Sie jedoch, dass die Lebensdauer eines temporären Bereichs innerhalb von range_expression nicht verlängert wird.

Und:

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

Zitat:

rvalue Referenz außer wie ein L-Wert-Referenz verhält, dass es zu einer temporären (rvalue) binden können, während Sie kann keine (nicht konstante) L-Wert-Referenz an einen R-Wert binden.