std :: mem_fn(& method_defined_with_forceinline)(* this)未内联

时间:2018-05-02 15:55:24

标签: c++ stl g++

这是由mem_fn()的实施在没有__forceinline/inline/__attribute__((always_inline))的情况下定义造成的吗? 有可能解决这个问题,例如:使用自己的mem_fn实现?

2 个答案:

答案 0 :(得分:2)

获取函数的指针不允许内联。

编译器将无法内联它,除非在编译时知道将调用哪个函数(通过指针或std::mem_fn),在这种情况下为什么在第一个中使用std::mem_fn地方(当你可以调用该功能时)?

答案 1 :(得分:0)

因此,std :: mem_fn()由于某种原因没有内联。这不可能简单,因为地址运算符用于确定地址,因为对内联函数的调用(也通过地址运算符指定)是内联的。我假设,这是由于存储在std :: mem_fn()创建的某个对象中的方法的地址引起的。 这里的解决方案是重写函数,该函数需要函数指针作为参数,以使其能够接受方法指针。 生成的汇编程序代码不再包含任何调用语句。

自己实现std :: mem_fn()没有任何优势 - 函数也没有内联。