我注意到 std::min 和 std::max 都内联在 stl_algobase.h 头文件中,我想知道这样的行是否对(任何,但尤其是 gcc)编译器有问题:
a = std::max(b, std::min(c, d));
当这个表达式被内联时,这里实际发生了什么?
解释:
我有这个完全没有意义的错误。我将错误追溯到这些行:
float mouseScenePosX = mouseEvent->scenePos().x();
mouseScenePosX = max((float)0,
min(mouseScenePosX, (float)scene->getSceneRect().width()-1));
我总是在 mouseScenePosX 中得到 0,尽管 mouseScenePosX 和 scene->getSceneRect().width()-1 都大于 0。奇怪的是,当我从 makefile 中删除 -O2 标志时,错误消失了,而且当我使用我自己的最小和最大实现。所以,我想知道它是否可能是由内联错误引起的。