void foo();
class Foomatic() {
void bar();
void baz()
{
std::thread a(foo); // this compiles
std::thread b(Foomatic::bar, this); // this doesn't
std::thread c(&Foomatic::bar, this); // and this compiles
// ...
}
};
멤버 함수에 대한 포인터의 올바른 구문은 &Foomatic::bar
입니다.멤버 함수에 대한 포인터 - 구문
하지만 정확히 Foomatic::bar
은 왜 잘못 되었습니까? 그 사람이 무엇을 반환합니까? 그리고 정확히 &Foomatic::bar
이 정확한 이유는 무엇입니까? 나에게 반 직관적 인 것처럼 보인다.
이것은 중복되지 않습니다. 연결된 문항에서 이유를 설명하지 않고 올바른 구문이 무엇인지 대답합니다.
저는 C++이 왜 여기에 일관성이 없는지 묻습니다. 이미 구문이 무엇인지 압니다. (당신은 주소의 운영자 &
을 사용하여 함수의 주소을 가지고 있기 때문에)
@Ed 치유 : 이것은 중복되지 않습니다. 나는 그것이 무엇인지 알기 때문에 올바른 구문이 무엇인지 묻고 싶습니다. 그러나 ** 올바른 구문의 정확한 이유는 무엇입니까 **. 대답은 올바른 구문이 무엇인지 말합니다. – marmistrz
대답은 동어 반복입니다. 언어 사양에 그렇게 나와 있기 때문에 구문이 올바르지 않습니다. 90 분 동안 축구 경기가 열리는 이유는 무엇입니까? 그게 규칙이 말하는거야. –
아마 진짜 질문은'a (& foo)'일 때''(foo)'가 작동하는 이유입니다. –