这是由mem_fn()
的实施在没有__forceinline/inline/__attribute__((always_inline))
的情况下定义造成的吗?
有可能解决这个问题,例如:使用自己的mem_fn实现?
答案 0 :(得分:2)
获取函数的指针不允许内联。
编译器将无法内联它,除非在编译时知道将调用哪个函数(通过指针或std::mem_fn
),在这种情况下为什么在第一个中使用std::mem_fn
地方(当你可以调用该功能时)?
答案 1 :(得分:0)
因此,std :: mem_fn()由于某种原因没有内联。这不可能简单,因为地址运算符用于确定地址,因为对内联函数的调用(也通过地址运算符指定)是内联的。我假设,这是由于存储在std :: mem_fn()创建的某个对象中的方法的地址引起的。 这里的解决方案是重写函数,该函数需要函数指针作为参数,以使其能够接受方法指针。 生成的汇编程序代码不再包含任何调用语句。
自己实现std :: mem_fn()没有任何优势 - 函数也没有内联。