为什么函数有时不会运行?

时间:2013-04-22 01:40:45

标签: c++ function

一些代码:

Menu.Handle_MouseOvers(MousePosition); //Runs function below

void Handle_MouseOvers(Vector2<int> &MousePositions) ///Runs function below
{
    if (MenuButtons.size() > 0)
    MenuButtons[0].CheckContains(MousePositions);
}

void CheckContains(Vector2<int> &MousePositions)
{
    if (ButtonShape.GetShape() == "Rect" && ButtonShape.GetRect().Contains(MousePositions)) ///This doesn't run sometimes
    {
        MouseOver = true;
        std::cout << "MouseOver is true" << std::endl;
    }
    else{
        std::cout << "mouseOver is false" << std::endl;
        MouseOver = false;
    }
}

由于某种原因,ButtonShape.GetRect()。Contains(MousePositions)仅在大约80%的时间内运行。我在函数中放置了一些couts,当它失败时,它根本不运行该函数。我无法弄清楚为什么它会在大多数时间工作大声笑。有没有人有任何想法?任何帮助将不胜感激。

将其添加为编辑;

bool Contains(Vector2<int> &MousePosition)
{
    std::cout << MousePosition.x << " " << MousePosition.y << std::endl;
    if (MousePosition.x >= x && MousePosition.x <= x + Width && MousePosition.y >= y && MousePosition.y <= y + Height)
        return true;
    else
        return false;
}

2 个答案:

答案 0 :(得分:2)

一个原因可能是因为这是一个逻辑/布尔表达式:

ButtonShape.GetShape() == "Rect" && ButtonShape.GetRect().Contains(MousePositions)

&&以这种方式运作:

  • 如果左侧的表达式为false,则计算结果为false而不评估右侧的表达式
  • 如果左表达式的计算结果为true,则仅计算第二个表达式
    • 现在,如果右侧表达式的计算结果为false,则结果为false
    • 否则,最终结果为真。

如果您在删除GetShape后进行测试,请确保每次Shape都设置为Rect


如果该功能每次仍未运行,则可能是您每次都可能无法正确设置MousePositions。根据您的功能代码,这将显示为未运行的功能。

答案 1 :(得分:1)

如果ButtonShape.GetShape()!=“Rect”,那么第二个表达式(包含对ButtonShape.GetRect()。Contains(MousePositions)的调用)将不会被调用,因为它不需要满足整个表达 - 这称为“短路”。