C++语法中的函数指针

Function pointers in C++ syntax

我检查了此作业右侧部分的签名: 创建线程:

std::thread t2 = std::thread(&Vehicle::addID, &v2, 2);

通过将鼠标悬停在右侧 "thread" 我得到:

std::thread::thread<...>(void (Vehicle::*&&_Fx)(int id), Vehicle &_Ax, int &&_Ax)

现在,我了解了 C 函数指针语法的基础知识。

但在 C++ 中,您首先会看到左侧的 class 名称很多次(尤其是在使用模板时)

所以我明白 - * 在此语法中表示指向 class Vehicle 的 (public) 成员函数的指针,该函数采用 int 和 returns void(无) ,但是 && (类似于移动构造函数)是什么意思? reference of reference of / 引用成员函数对象的引用??

注意左值参数 (&v2) 如何成为左值引用,而右值参数(文字 2 和您的 &Vehicle::addID)如何成为右值引用。

您正在使用的构造函数模板是:

template< class Function, class... Args >
explicit thread( Function&& f, Args&&... args );
//                                 ^^

我们可以在那里看到,我们要求计算机通过 "universal reference" 获取参数,即尽可能参考每个参数的值类别。

所以你看到了结果。

它不是指向成员函数的指针类型的一部分:它变成了指向指向指向成员函数指针的右值引用,因为这就是 std::thread 接受其参数的方式,为了美观和通用。在函数指针的情况下,它是多余的,因为 "move" 没有任何意义,但对于更复杂的参数,这可能很重要。

当然,由于我们从 C 继承的令人讨厌的 "spiral rule",您最终会在指针类型的中间得到令人困惑的 &&


tl;博士:

take the reference [pointer — Ed.] to the member function object by reference??

差不多。