C ++语法中的函数指针

问题描述 投票:0回答:1

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

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:


通过引用将引用

[指针-
编辑]指向成员函数对象?

相当。

c++ member-function-pointers
1个回答
0
投票
template< class Function, class... Args > explicit thread( Function&& f, Args&&... args ); // ^^
© www.soinside.com 2019 - 2024. All rights reserved.