[英]c++11 std::thread compiles with function, but not class
我正在使用帶有c ++ 11標志的g ++ 4.7。 在這個演示中:
#include <iostream>
#include <thread>
class do_work
{
public:
void operator()()
{
std::cout << "Doing work..." << std::endl;
}
};
void foo()
{
}
int main()
{
// Does not work
std::thread t(do_work);
t.join(); // error: request for member ‘join’ in ‘t’, which is of non-class type ‘std::thread(do_work)’
// Works
std::thread t2(foo);
t2.join();
return 0;
}
我可以在一個用函數作為構造函數參數創建的線程上成功調用join(),但我不能在用functor作為構造函數參數創建的線程上調用join()(請參閱錯誤內聯)。 有誰能解釋一下?
你已經將t
聲明為一個帶do_work
並返回std::thread
的函數。
你可能想寫
do_work worker;
std::thread t{worker};
要么
std::thread t{do_work{}};
要么
std::thread t((do_work()));
注意
std::thread t(do_work());
不行; 它難懂解析為聲明函數t
利用函數,它沒有參數,並返回do_work
,並返回std::thread
。 用括號包裝do_work
臨時或使用統一的初始化語法(在任何時候)將解決它。
這是養成盡可能使用統一初始化語法的習慣的一個很好的理由; 如果你寫的
std::thread t{do_work}; // incorrect
然后編譯將在該行而不是join
失敗。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.