用于std::bind
绑定成员函数时,第一个参数是对象this
指针。但是,它可以将对象作为指针而不是作为指针传递。
例如,请参见以下程序:
#include <iostream>
#include <functional>
struct foo
{
void bar(int v) { std::cout << "foo::bar - " << v << '\n'; }
};
int main()
{
foo my_foo;
auto f1 = std::bind(&foo::bar, my_foo, 1);
auto f2 = std::bind(&foo::bar, &my_foo, 2);
f1();
f2();
}
clang 和 GCC 都毫无怨言地编译了这个,结果对两个绑定都有效:
富::酒吧 - 1 富::酒吧 - 2
我一直在尝试围绕规范(第 20.8.9 节)展开思考,但这是我不清楚的地方之一。
应该只有一个是正确的,还是两个都正确?