C++ 将变量声明移出for循环

C++ 将变量声明移出for循环,c++,for-loop,variable-declaration,C++,For Loop,Variable Declaration,文件:body.cpp for(int i=0;i已修改) 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}; bodie

文件:body.cpp

for(int i=0;i已修改)

  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);
  }
inti;
双质量;
向量位置;
std::载体b;
对于(i=0;i
  • 您没有移动所有变量。
    pos
    b
    仍在循环内定义,隐藏了外部定义(由于某种原因,外部
    pos
    变成了
    向量)。外部变量在循环内未被触及,因此未按您预期的方式初始化
  • 如果没有充分的理由,你不应该这样做。变量的作用域越小,你就越能对代码进行推理
  • 我最好的猜测是你想要这样的东西

    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
    
    向量pos;
    
    对于(int i=0;i您这样做是为了提高性能吗?如果是的话,您肯定做过一些认真的分析,对吗?结果有什么不同?它看起来应该在
    主体中放置相同的值。您还期望得到什么结果?@Pablo不,我没有做分析,因为这是一个旨在提高性能的练习的一部分了解OpenMP(我在C++部分中不断堆叠)在这里,我们只应该把语用句作为最小的C++程序改变,因为程序故意是坏编程的,以增加计算时间,因此减少OpenMP的时间是更大的,更容易看到的。这并不能真正解释为什么它没有产生相同的结果。pos
    b
    变量在循环之外,因此它们是否未初始化并不重要。@Barmar from“不幸的是,由于变量b和/或pos的初始化错误,它没有返回相同的结果”我知道在这个循环之外有一些代码,使用这些变量。但是原始代码会做什么,这是“不一样的”as?这是一个很好的问题。我相信OP可以详细说明。@AlvaroGomez请补充这个问题,说明您在原始代码中做了什么,在新代码中尝试了什么,以及结果如何不同。事实上,问题是什么还不清楚。
      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);
      }
    
    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