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)'だったはずの 'a(foo)'が動作する理由です。 –