Domanda

I know how to use auto keyword in for loop to iterate this array either by value or reference.

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();
  }
}

So I am looking third version of this convention. How do I use pointer here?

È stato utile?

Soluzione

A a[2];
for(auto& x_:a){
  auto* x = &x_;
  // code
}

Altri suggerimenti

You don't. If you want a pointer, either write a classical for-loop, or loop by reference and take the address.

I'm not recommending it, but if you insist on using pointer -> syntax, just make an array of A* and treat it like a value (i.e. do regular auto in the range-for loop)

#include <iostream>

struct A {
 void fun() { std::cout << "fun \n"; };
};

int main() {
  A* a[2];

  // Pointer
  for (auto x : a) {
    x->fun();
  }
}

Live Example

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top