Mongocxx游标和右值引用

mongocxx cursor and rvalue references

本文关键字:引用 游标 Mongocxx      更新时间:2023-10-16

我正在寻找mongocxx查询示例,我不明白这里使用auto&&/auto&的意义。

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

在文档中,他们是这样使用的:

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

我想用for(auto& doc : cursor)

这里的最佳实践是什么,为什么?

在这里:

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

"range " for"中的"range表达式"可以返回一个临时的。

在这里使用右值引用(当使用auto时)是"最佳实践"

看看这个:http://en.cppreference.com/w/cpp/language/range-for

:

如果range_expression返回一个临时变量,它的生存期将被延长到循环结束,如绑定到右值引用__range所示,但要注意,range_expression中任何临时变量的生存期都不会被延长。

:

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

:

右值引用的行为与左值引用类似,除了它可以绑定到临时(右值),而不能将(非const)左值引用绑定到右值。