std::bind
놀고 있었는데
:멤버 함수에 '&'가 필요한 이유는 무엇입니까 (예 : std :: bind)?
class Foo
{
public:
void F();
int G(int, int);
};
void Foo::F()
{
auto f = bind(&Foo::G, this, _1, _2);
cout << f(1,2) << endl;
}
int Foo::G(int a, int b)
{
cout << a << ',' << b << endl;
return 666;
}
을하지만 난에 Foo::G
앞에있는 '&'를 제거하는 경우 bind
- 라인, 나는 약간의 컴파일러 에러 (MinGW 4.7 사용)를 얻을 것이다.
H
과 &H
이 모두 "일반적인"기능을 수행하지만 Foo::G
이 멤버 함수에 대한 포인터로 유효하지 않은 이유는 무엇입니까?
LG ntor
특별한 이유없이 - Bjarne는 회원 함수의 주소를 취하기 위해'&'를 요구하기로 결정했습니다. –
... 그렇지 않으면 멤버 함수의 이름이 함수 포인터로 쇠퇴 할 때 멤버 함수 포인터로 쇠퇴하지 않습니다. –
그리고 C++에서 C와 하위 호환이 필요하지 않은 경우 함수가 포인터로 부패하지 않을 것이라고 보증합니다. –