gpt4 book ai didi

c++ - 从内联函数调用中调用内联函数?

转载 作者:行者123 更新时间:2023-11-30 03:00:11 24 4
gpt4 key购买 nike

我注意到 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com