从内联函数调用中调用内联函数
Calling an inline function from an inline function call?
我注意到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,尽管mouseScene PosX和scene->getSceneect().width()-1都大于0。奇怪的是,当我从makefile中删除-O2标志时,这个错误就消失了,而且,当我使用自己的min和max实现时。所以,我想知道它是否是由内联中的错误引起的。
它的行为保证就像调用函数一样。编译器所做的任何内联(如果有的话)都必须产生与不进行内联时相同的结果。
换句话说,您的示例代码应该完全按照您的期望工作,返回比较b的最大值与比较c与d的最小值。
如果你发现一个编译器违反了这一点,就把它扔掉。
我从来没有见过关于这种事情的GCC错误。实际上,从来没有见过关于内联的错误。
您可能需要尝试在最后一个参数中添加括号:
getSceneRef().width()-1));?>如果它能更好地工作,那么min/max不是std::min和std::max。
因为std::min和std::max是函数(内联或非内联),调用约定不能中断,所以如果拆分会更好地工作是没有意义的。
相关文章:
- 函数调用中参数的顺序重要吗
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 变量没有改变?通过向量的函数调用
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数
- 我知道函数调用中存在歧义.有没有办法调用foo()函数
- 模板函数调用
- 获取从C++中同一类中的构造函数调用的方法返回的值
- 析构函数调用
- 成员函数调用和C++对象模型
- 使用共享指针的函数调用,其对象应为 const
- C++:编译时检查匹配的函数调用对?
- 函数调用C++中的参数太少
- 来自 DLL 的函数调用 [表观调用的括号前面的表达式必须具有(指向-)函数类型]
- 返回指向对象的指针的函数调用是否为 prvalue?
- C++ 如何重载 [] 运算符并进行函数调用
- 代码的效率. 转到和函数调用
- 是同一作用域的函数部分中的函数调用
- 如何封装一个函数,以便它只能由同一类中的一个其他函数调用?
- 类型擦除的std::function与虚拟函数调用的开销