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??
差不多。
我检查了此作业右侧部分的签名: 创建线程:
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??
差不多。