在for循环外移动变量声明

时间:2015-11-20 01:07:05

标签: c++ for-loop variable-declaration

文件: 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;
};

我的目的是定义循环外的所有变量。我的方法(之后我发现它不正确,因为它没有返回相同的结果)是以下一个:

bodies.cpp - &gt;已修改

  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和/或pos的初始化错误,它没有返回相同的结果,但在编译时不会引发任何错误。

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

1 个答案:

答案 0 :(得分:3)

  1. 您没有移动所有变量。 posb仍在循环中定义,隐藏了外部定义(由于某种原因,外部pos变为vector<phys_vector>。外部变量在循环内部不受影响,因此不会按照您的预期方式进行初始化。
  2. 不应该没有充分理由这样做。变量的范围越小,您就越能够推断出代码。
  3. 我最好的猜测是你想要这样的东西

    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
    
相关问题