【问题标题】:C++11 range based auto for loop by value, reference, and pointer基于 C++11 范围的自动 for 循环按值、引用和指针
【发布时间】:2013-11-27 10:12:16
【问题描述】:

我知道如何在 for 循环中使用 auto 关键字通过值或引用来迭代这个数组。

struct A {
 void fun() {};
};

int main() {
  A a[2];

  // Value
  for (auto x : a) {
    x.fun();
  }

  // Ref
  for (auto& x : a) {
    x.fun();
  }

  // Pointer
  //for (...) {
    x->fun();
  }
}

所以我正在寻找这个约定的第三个版本。这里如何使用指针?

【问题讨论】:

  • 指针是值类型。

标签: c++ c++11 for-loop auto


【解决方案1】:
A a[2];
for(auto& x_:a){
  auto* x = &x_;
  // code
}

【讨论】:

    【解决方案2】:

    你没有。如果你想要一个指针,要么写一个经典的 for 循环,要么通过引用循环并获取地址。

    【讨论】:

      【解决方案3】:

      我不推荐它,但如果你坚持使用指针 -> 语法,只需创建一个 A* 数组并将其视为一个值(即在 range-for 循环中执行常规 auto

      #include <iostream>
      
      struct A {
       void fun() { std::cout << "fun \n"; };
      };
      
      int main() {
        A* a[2];
      
        // Pointer
        for (auto x : a) {
          x->fun();
        }
      }
      

      Live Example

      【讨论】:

      • 呃,不,不要……Xeo 从来没有说过要这样做。
      • @LightnessRacesinOrbit 我同意 ew,但只是想指出一点,以防 OP 坚持使用 -&gt; 语法。更新了答案,tnx。
      猜你喜欢
      • 1970-01-01
      • 2021-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多