C++语法中的函数指针

Function pointers in C++ syntax

本文关键字:函数 指针 语法 C++      更新时间:2023-10-16

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

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(无(,但 &&(类似于移动构造函数(是什么意思? 引用引用/通过引用获取对成员函数对象的引用??

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

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

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

我们可以看到,我们要求计算机通过"通用引用"来获取参数,即尽可能引用,给定每个参数的值类别。

所以你看到了结果。

它不是指向成员函数类型的一部分:它已成为指向指向成员函数的右值引用,因为这就是std::thread接受其参数的方式,目的是变得友好和通用。在函数指针的情况下,它是多余的,因为没有什么可以"移动"的,但对于更复杂的参数,这可能很重要。

当然,由于我们从 C 继承了令人讨厌的"螺旋规则",您最终会在指针类型的中间混淆地&&


tl;博士:

通过引用将 [指针 —Ed.] 引用到成员函数对象??

几乎。