Как я понимаю, само название функции служит указателем на нее.
Поэтому, когда у меня есть функция, я могу создать поток, просто передав его адрес конструктору потока, как показано ниже:
void thread_function {
}
std::thread threadObj1(thread_function);
Моя путаница возникает при передаче адреса нестатической функции-члена в поток. Например:
class ClassA
{
public:
void nonstatic_function()
{
}
};
ClassA instance;
std::thread threadObj2(ClassA::nonstatic_function, &instance);
Передача адреса такой функции осуществляется двумя способами:
ClassA::nonstatic_function
&ClassA::nonstatic_function
Почему существует дополнительный &
? Если это действительно нужно, то почему же компилятор не жалуется даже без него?