在 C++ 中基于 for 循环更新范围内的 class 成员值

Updating class member values inside a range based for loop in C++

上面的代码有效。它下面的代码没有。为什么?

我正在使用对象的名称成员在 C++ 中搜索 class 个对象的向量,以便增加它的监视成员。常规的 for 循环和语法成功地增加了成员。但是,我尝试使用我认为是基于范围的 for 循环的正确语法来做同样的事情是不成功的。使其成功的正确语法是什么?

   //This works
   for(size_t i{0}; i<mList.size(); ++i)
   {
      if(mList.at(i).name == name_val)
      {
         mList.at(i).watched += 1;//Successfully increments member of the object
         return;
      }
   }

   //This does not work
     for(auto m : mList)
   {
      if(m.name == name_val)//This if clause does appear to work though..
      {                     //..in a different function.
         m.watched += 1;//But this here is not incrementing the object member
         return;
      }
   }

顺便说一句,如果有区别的话,这些循环在一个方法内部,该方法与向量一起是向量中对象的朋友 class 到 class 的成员。而且我也已经尝试过 ++m.watched;和 ++(m.watched);没有成功。谢谢

您的循环每次迭代都会将元素复制到 m 中。您对 m 的更改将针对该副本。改为 m 对容器中元素的引用:

     for(auto& m : mList)