将变量声明移到 for 循环之外

moving variable declarations outside for loop

文件:bodies.cpp

  for (int i=0; i<n; ++i) {
    phys_vector pos{xdist(re), ydist(re)};
    double mass = mdist(re);
    body b{pos.x, pos.y, mass};
    bodies.push_back(b);
  }

文件:bodies.h

public:
  bodies_aos() = default;
private:  
  std::vector<phys_vector> compute_forces(const simulation_parameters & param);    
private:
  std::vector<body> bodies;
};

我的意图是在循环外定义所有变量。我的方法(后来我发现它是不正确的,因为它没有 return 相同的结果)是以下方法:

bodies.cpp ->修改

  int i;
  double mass;
  vector<phys_vector> pos;
  std::vector<body> b;

  for (i=0; i<n; ++i) {
    phys_vector pos{xdist(re), ydist(re)};
    mass = mdist(re);
    body b{pos.x, pos.y, mass};
    bodies.push_back(b);
  }

不幸的是,由于变量初始化错误 b and/or pos,它没有 return 相同的结果,但它在编译时不会引发任何错误.

有谁知道如何解决这个问题以获得与第一种情况相同的结果?

  1. 您没有移动所有变量。 posb 仍然在循环内部定义,隐藏了外部定义(由于某种原因,外部 pos 变成了 vector<phys_vector> )。外部变量在循环内未受影响,因此未按照您预期的方式进行初始化。
  2. 不应该没有充分理由就这样做。变量的范围越小,您对代码的推理能力就越好。

我最好的猜测是你想要这样的东西

vector<phys_vector> pos;

for (int i=0; i<n; ++i) {
    pos.emplace_back(xdist(re), ydist(re));
    double mass = mdist(re);
    bodies.emplace_back(pos.back().x, pos.back().y, mass);
}
// use pos and bodies