大佬教程收集整理的这篇文章主要介绍了c 11 std :: thread用函数编译,但不编译,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
#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; }
我可以在一个用函数作为构造函数参数创建的线程上成功@L_944_4@join(),但我不能在用functor作为构造函数参数创建的线程上@L_944_4@join()(请参阅错误内联).有谁能解释一下?
你可能想写
do_work worker; std::thread t{worker};
要么
std::thread t{do_work{}};
要么
std::thread t((do_work()));
注意
std::thread t(do_work());
不行;它是vexingly parsed声明一个函数t采用一个不带参数的函数并返回do_work,并返回std :: thread.用括号包装do_work临时或使用统一的初始化语法(在任何时候)将解决它.
这是养成尽可能使用统一初始化语法的习惯的一个很好的理由;如果你写的
std::thread t{do_work}; // incorrect
然后编译将在该行而不是连接失败.
以上是大佬教程为你收集整理的c 11 std :: thread用函数编译,但不编译全部内容,希望文章能够帮你解决c 11 std :: thread用函数编译,但不编译所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。