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 Heal: Это не дубликат. Я не спрашиваю, каков правильный синтаксис, потому что я знаю, что это такое, но ** почему ** правильный правильный синтаксис. Ответы только говорят, что такое правильный синтаксис. – marmistrz
Ответ тавтологический. Синтаксис неверен, потому что спецификация языка так говорит. Почему футбольный матч длится 90 минут? Потому что это то, что говорят правила. –
Возможно, реальный вопрос заключается в том, почему 'a (foo)' работает, когда это должно быть 'a (& foo)'? –