因为非静态成员函数在编译的时候,会在参数列表中加入this指针指向对象本身,之后可以通过this指针访问类成员。
而静态成员函数不属于对象,而是属于整个类,相当于全局函数,在编译的时候参数列表是不会进行扩展,加入this指针的。
因此,如果绑定的是一个非静态成员函数,在编译的时候,解析参数列表就会出现错误,导致编译失败。
下面是绑定非静态类成员函数的代码及编译结果:
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <thread>
using namespace std;
class people
{
public:
void fun(int a)
{
cout << "a = " << a << endl;
};
};
int main(void)
{
std::thread t(&people::fun, 1);
t.join();
return 0;
}
结果编译错误,未找到相应的重载函数,参数不匹配,当然找不到!:
下面是绑定静态类成员函数的代码及编译结果:(正确姿势)
其实就是在成员函数里面加了一个static声明
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <thread>
using namespace std;
class people
{
public:
static void fun(int a)
{
cout << "a = " << a << endl;
};
};
int main(void)
{
std::thread t(&people::fun, 1);
t.join();
return 0;
}
运行结果如下:
谢谢阅读