template< class Function, class... Args >
explicit thread( Function&& f, Args&&... args );
// ^^
我检查了此作业此正确部分的签名:创建线程:
std::thread t2 = std::thread(&Vehicle::addID, &v2, 2);
通过鼠标悬停并在右侧获得“线程”进行悬停:
std::thread::thread<...>(void (Vehicle::*&&_Fx)(int id), Vehicle &_Ax, int &&_Ax)
现在,我知道C函数指针语法的基础。
但是在C ++中,您首先会在左边多次看到类名(尤其是在使用模板时)
因此,我理解-*在此语法中表示一个指向Vehicle类的(公共)成员函数的指针,该成员函数带有一个int并返回void(无),但是&&(类似于move构造函数)是什么意思?对引用的引用/通过引用对成员函数对象的引用?
我检查了此作业此正确部分的签名:创建线程:std :: thread t2 = std :: thread(&Vehicle :: addID,&v2,2);通过鼠标悬停并在...上的“线程”上悬停,
&v2
)如何成为左值引用,右值参数(文字2
和您的&Vehicle::addID
如何成为右值引用。template< class Function, class... Args >
explicit thread( Function&& f, Args&&... args );
// ^^
[我们可以看到,我们要求计算机通过“通用引用”来接受参数,即,在给定每个值的值类别的情况下,尽可能地引用。
所以您正在看到结果。
这不是指针到成员函数的类型的一部分:它已成为指针成员函数的右值引用,因为这是std::thread
以其参数为目的的方式很好,很普通。对于函数指针,它是多余的,因为没有“移动”的内容,但是对于更复杂的参数,这可能很重要。
当然,由于我们从C继承了令人讨厌的“螺旋规则”,因此您最终在指针类型的中间出现了&&
令人困惑的问题。 🤪😭
tl; dr:
通过引用将引用
[指针-编辑]指向成员函数对象?相当。
template< class Function, class... Args >
explicit thread( Function&& f, Args&&... args );
// ^^