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

标签 c++ qt inline

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

相关文章:

c++ - 如何正确子类化并插入 View QAbstractProxyModel

macos - Qt 堆叠小部件在 Mac OS + OpenGL 上的奇怪行为

c++ - 替换函数 'operator new' 无法声明 'inline' [-Werror,-Winline-new-delete]

html - 内联 CSS - 背景位置不起作用

c++ - QGLWidget 获取 Windows 的 gl 上下文

c++ - 我可以使用模板(或花哨的宏)将字符串文字可靠地转换为符号名称吗?

c++ - 使用 Qt 树模型存储数据?

html - 通过内联 CSS 加载外部字体

c++ - 使用当前焦点小部件上下文菜单自动填充菜单栏中的 "Edit"菜单

c++ - 根据类型从 vector 中检索对象