我注意到 std::min 和 std::max 都内联在 STL_algobase.h header 中,我想知道这样的行是否对(任何,尤其是 gcc)编译器有问题:
a = std::max(b, std::min(c, d));
当这个表达式被内联时,这里实际上发生了什么?
解释:
我有 this根本没有意义的错误。我将错误追溯到这些行:
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 标志时,错误消失了,而且,当我使用自己的最小和最大实现时。 所以,我想知道它是否可能是由内联错误引起的。
最佳答案
保证它的行为就像进行函数调用一样。编译器所做的任何内联(如果有的话)绝对必须产生与未进行内联时相同的结果。
换句话说,您的示例代码应该完全按照您的预期工作,返回比较 b 的最大值和比较 c 和 d 的最小值。
如果您发现违反此规定的编译器,请将其丢弃。
我从未见过关于此类事情的 GCC 错误。实际上从未见过关于内联的错误。
关于c++ - 从内联函数调用中调用内联函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12347916/