//正常用不是這樣的嗎?
#include<iostream>
#include <thread>
using namespace std;
class A{
public:
void operator()() const
{
cout<<"使用了可呼叫物件"<<endl;
}
};
int main(int argc, char const *argv[])
{
A a;
a();
return 0;
}
輸出:使用了可呼叫物件
然后,在C++使用thread,a是不能加括號的!
include<iostream>
#include <thread>
using namespace std;
class A{
public:
void operator()() const
{
cout<<"使用了可呼叫物件"<<endl;
}
};
int main(int argc, char const *argv[])
{
A a;
thread b(a);
b.join();
return 0;
}
輸出:使用了可呼叫物件
uj5u.com熱心網友回復:
不是語言的原因,Thread本身就是這樣,不需要以 Thread(方法) 形式呼叫,直接Thread(方法名)。uj5u.com熱心網友回復:
a()是一個函式呼叫運算式。所有運算式都有回傳值。你這個運算式的回傳值是void,
此時
thread b(a());相當于 thread(void);
試試再增加一個多載
A& operator()(int a) const
{
cout<<"使用了可呼叫物件"<<endl;
return *this;
}
此時再試著呼叫
thread b(a(1));//可能會答應兩次
//以上都是我猜的,理論上成立,實際上也應該成立才是。但是我猜的

uj5u.com熱心網友回復:
簡單的說法是:
如果
thread(a());//則thread接收a()運算式的值【即回傳值】,作為函式地址【因為thread()這里需要的引數就是函式地址】
thread(a);//則thread接收的就是a【這里,a就等于函式地址】
uj5u.com熱心網友回復:
哈哈,老哥,秀,嗯,可以這樣理解嗎,就是,thread需要的是函式地址,使用多載運算子(),是在thread,內部進行的
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/85994.html
標籤:C++ 語言
