【问题标题】:I need help understanding what the syntax of this particular if statement accomplishes我需要帮助理解这个特定 if 语句的语法完成了什么
【发布时间】:2023-03-28 19:08:01
【问题描述】:

我试图跟随并分解一个 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() 的 -infront 有什么作用?方向是一个队列。它将front()返回的引用乘以-1吗? 感谢您的帮助-我将在下面发布一个指向整个项目所在的 github 的链接。 https://github.com/HexagonNico/Pac-Man/blob/master/PacMan.cpp 如果你喜欢的话。

【问题讨论】:

  • 是否将 front() 返回的引用乘以 -1? 实际上,尽管大多数人会说它只是否定了 front() 返回的值。
  • - 是减法,而不是乘法。在这种情况下,它会否定 directions.front() 返回的值,这意味着它将符号更改为与原来相反的符号。
  • unary minus(或否定)运算符。你可以在this cppreference page找到它的描述。
  • front() 返回对队列中第一个对象的引用。就这段代码而言,它正在对队列中的第一个对象进行操作。例如,如果front() 返回4int,则 if 语句将dir-4 进行比较。
  • @KenWhite:- 既不是减法也不是乘法。它只是一个象征。没有其他的。仅仅因为它经常用于减法,并不意味着它是减法。在这种情况下,它是一个否定。正如你所说的那样,但这与 减法 没有任何关系。

标签: c++ if-statement syntax


【解决方案1】:

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

在这种情况下,Direction 类型是一个枚举,如标题 Directions.h 中定义的那样

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

在这种情况下,否定一个 Direction 实例只会给我们它截然相反的结果。

例如,考虑值 Direction::Up 在调用函数时位于队列的头部,并且函数的参数是 Direction::Down。在这种情况下,队列方向将被清除。我添加了一个example 以使这一点更清楚。

【讨论】:

  • 优秀的例子我的朋友,谢谢你让我头脑清醒。我真的很感谢你花时间帮助我。下次我坐下来工作时,我会看看你的例子。再次感谢。
猜你喜欢
  • 2015-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-14
相关资源
最近更新 更多