3

我正在寻找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)

这里的最佳做法是什么,为什么?

4

1 回答 1

2

在这一点:

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

“range for”中的“范围表达式”可以返回一个临时的.

在此处使用右值引用是“最佳实践”auto (使用时)。

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

引用:

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

还有这个:

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

引用:

右值引用的行为就像左值引用,只是它可以绑定到临时(右值),而您不能将(非 const)左值引用绑定到右值。

于 2016-11-04T17:04:57.700 回答