Мне нужна функция класса stati c, чтобы иметь возможность использовать обратный вызов мыши GLFW3 в C ++. Когда я использую оператор if в функции, я получаю неправильные результаты. Я сделал несколько простых демонстрационных кодов. С более сложной функцией обратного вызова мыши, вызываемой GLFW3, я получаю аналогичные результаты.
Что я делаю не так?
Это мой код:
#include <iostream>
class StaticTest
{
public:
StaticTest();
~StaticTest();
int setCallback();
static void callback(double xpos, double ypos);
};
StaticTest::StaticTest()
{
}
StaticTest::~StaticTest()
{
}
void StaticTest::callback(double xpos, double ypos)
{
float p;
static float q;
p += xpos;
p += ypos;
q = p;
std::cout << "p, q before if: " << p << ", " << q << std::endl;
if (p > 2*5)
p = 100;
if (q > 2*5*p/q)
q = 100;
std::cout << "p, q after if: " << p << ", " << q << std::endl;
}
int main()
{
StaticTest st;
StaticTest::callback(1,2);
StaticTest::callback(4,3);
}
Эти результаты в терминале с различными опциями компилятора:
jb@jbpc $ g++ --version
g++ (Ubuntu 5.4.0-6ubuntu1~16.04.12) 5.4.0 20160609
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
jb@jbpc $ g++ static-test.cpp
jb@jbpc $ ./a.out
p, q before if: 3, 3
p, q after if: 3, 3
p, q before if: 10, 10
p, q after if: 10, 10
jb@jbpc $ g++ -O1 static-test.cpp
jb@jbpc $ ./a.out
p, q before if: 3, 3
p, q after if: 100, 3
p, q before if: 7, 7
p, q after if: 100, 7