问题
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?
回答1:
A a[2];
for(auto& x_:a){
auto* x = &x_;
// code
}
回答2:
You don't. If you want a pointer, either write a classical for-loop, or loop by reference and take the address.
回答3:
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
来源:https://stackoverflow.com/questions/20239507/c11-range-based-auto-for-loop-by-value-reference-and-pointer