C++ C++;11 for循环语法工作不正常
我正在使用SFML制作一个Arkanoid克隆,作为学习练习。对于PowerUp类,我有一个更新方法,如下所示:C++ C++;11 for循环语法工作不正常,c++,c++11,for-loop,foreach,C++,C++11,For Loop,Foreach,我正在使用SFML制作一个Arkanoid克隆,作为学习练习。对于PowerUp类,我有一个更新方法,如下所示: void PowerUp::update(FrameTime mFT) { if (!(bottom() >= windowHeight)) shape.move(velocity * mFT); else onGround = true; } 在我的PowerUpManager类中,我有一个通电向量,该函数用于一次更新所有通电向量: void Pow
void PowerUp::update(FrameTime mFT) {
if (!(bottom() >= windowHeight))
shape.move(velocity * mFT);
else
onGround = true;
}
在我的PowerUpManager类中,我有一个通电向量,该函数用于一次更新所有通电向量:
void PowerUpManager::update(FrameTime mFT) {
for (auto powerUp : mPowerUps)
powerUp.update(mFT);
}
然而,这似乎不起作用。如果我运行这段代码,那么在产卵后,加电只是保持静止,不会像它们应该的那样向下移动。但是,如果我替换
for (auto powerUp : mPowerUps)
powerUp.update(mFT);
用更传统但更老式的
for (int i{ 0 }; i < mPowerUps.size(); ++i)
mPowerUps[i].update(mFT);
,工作正常,无任何问题。问题在于循环中的
通电
是来自mPowerUps
容器的副本。您需要使用引用:
for (auto& powerUp : mPowerUps)
powerUp.update(mFT);
非常感谢。这是如此简单,它飞过去的权利,我的头。作为后续问题,我当前版本的draw函数(没有引用)是否会通过复制对象然后再绘制来增加不必要的开销?@Bluejay是的,复制总是会增加一些额外的开销,因为它涉及调用复制构造函数。由于处理和实现引用的一种常见方法是使用指针,因此使用引用的开销与复制指针的开销相同:指针的4或8字节副本,没有函数调用,通常比对象复制的开销小得多。
for (auto& powerUp : mPowerUps)
powerUp.update(mFT);