我正在尝试跟踪并分解 pacman 克隆的源代码。有一个 if 语句让我感到困惑。
void PacMan::queueDirection(Direction dir)
{
if (!directions.empty())
{
if (dir == -directions.front()) //this statement
{
std::queue<Direction> clear;
std::swap(directions, clear);
}
}
if(directions.size() < 2)
directions.push(dir);
}
我的问题是 -directions.front() 的 - 前面有什么作用?方向是一个队列。它会将 front() 返回的引用乘以 -1 吗? 感谢您的帮助 - 我将在下面发布整个项目所在的 github 链接。 https://github.com/HexagonNico/Pac-Man/blob/master/PacMan.cpp如果这激起了你的兴趣。
最佳答案
您粘贴的代码似乎具有以下意图:
如果队列头部的 Direction 实例(directions)是作为该函数参数提供的值的负数,则队列将被清除,并且所提供的参数将入队。
本例中的 Direction 类型是 header Directions.h 中定义的枚举。
enum Direction
{
Up = 1,
Down = -1,
Left = 2,
Right = -2,
Unset = 0
};
在本例中,对 Direction 实例取反,只会给出它的相反方向。
作为示例,请考虑在调用函数时值 Direction::Up 位于队列的头部,并且函数的参数为 Direction::Down。在这种情况下,队列方向将被清除。我添加了example为了使这一点更清楚。
关于c++ - 我需要帮助理解这个特定 if 语句的语法的作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63974255/