基于C++11范围的自动循环(按值、引用和指针)

C++11 range based auto for loop by value, reference, and pointer

本文关键字:按值 引用 指针 循环 范围 C++11 基于      更新时间:2023-10-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();
  }
}

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

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

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

我不建议使用它,但如果您坚持使用指针->语法,只需制作一个A*数组并将其视为一个值(即在循环的范围内执行常规auto

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

实时示例