当使用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();
}
Run Code Online (Sandbox Code Playgroud)
clang和GCC都没有投诉地编译它,结果适用于两个绑定:
foo::bar - 1 foo::bar - 2
我一直试图围绕规范(第20.8.9节),但它是我不太清楚的地方之一.
应该只有一个是正确的,还是都是正确的?