小编Dmi*_*eev的帖子

基于范围的 for 循环表达式中的临时可选

假设我们有一个返回 的函数std::optional<A>。那么在基于范围的 for 循环中使用结果的正确方法是什么?最简单的方法不起作用:

for (auto&& e : a().value()) {
                   // ^--- A&& is returned, so A is destructed
                   // before loop starts
Run Code Online (Sandbox Code Playgroud)

T optional::value() &&如果我们用代替 ,这个问题就不会存在T&& optional::value() &&,但 STL 和 Boost 都以第二种方式定义它。

处理这种情况的正确方法是什么?我不喜欢我能想到的两种解决方案(沙箱):

std::experimental::optional<A> a() {
  // ...
}

void ok1() {
  // ugly if type of A is huge
  for (auto&& e : A(a().value())) {
     // ...
  }
}

void ok2() {
  // extra variable is not used
  // if for …
Run Code Online (Sandbox Code Playgroud)

c++ std boost-optional c++17

7
推荐指数
1
解决办法
489
查看次数

标签 统计

boost-optional ×1

c++ ×1

c++17 ×1

std ×1