我需要帮助理解这个特殊if语句的语法实现了什么



我正试图跟随并分解一个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);
}

我的问题是-infront-of-directions.front((做什么?方向是一个队列。它是否将front((返回的引用乘以-1?感谢您的帮助-我将在下面发布一个链接到整个项目所在的github。https://github.com/HexagonNico/Pac-Man/blob/master/PacMan.cpp如果这能激起你的兴趣。

您粘贴的代码似乎有以下意图:
如果队列头的Direction实例directions是作为此函数参数提供的值的负数,则队列将被清除,提供的参数将被排入队列。

在这种情况下,Direction类型是标头Directions.h 中定义的枚举

enum Direction
{
Up = 1,
Down = -1,
Left = 2,
Right = -2,
Unset = 0
};

在这种情况下,否定Direction实例只会使我们看到它的完全相反。

例如,请考虑在调用函数时,值Direction::Up位于队列的开头,函数的参数为Direction::Down。在这种情况下,队列方向将被清除。我增加了一个例子,使这一点更加清楚。

最新更新