前提:
这里是一个函数:
typedef std::function<void (int)> Handler;
void g(const Handler& h) {
h(100);
}
和一类:
class A {
public:
void f0(int n) {
std::cout << m + n << std::endl;
}
void f1() {
::g(std::bind(&A::f0, this, std::placeholders::_1));
}
int m;
};
这将打印两行,“101”和“102”:
int main() {
A a1;
a1.m = 1;
a1.f1();
A a2;
a2.m = 2;
a2.f1();
return 0;
}
现在,我意识到A::f1()
会很频繁调用,
所以我修改了它这样的(新版本):
void A::f1() {
static const Handler kHandler =
std::bind(&A::f0, this, std::placeholders::_1);
::g(kHandler);
}
我的问题:
它是安全绑定this
指针到本地静态变量?
有两个版本之间没有功能上的区别?
我可以期待新版本将真正获得一些性能上的好处?
(我怀疑我的编译器(MSVC)会自行优化它,
所以我可能不需要由我自己来优化它)。
EDITED ----------
我运行的新版本,实现的结果是不一样的原始之一。
它再次打印两行,“101”和“101”(不是“102”)。
可怜的问题,对不起所有。
组织编写----------
请参考我的新的问题,我可能真的打算:
结合成员函数的成员变量