在 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)
上面的代码有效。它下面的代码没有。为什么?
我正在使用对象的名称成员在 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)