问题描述
- C++ 线程和仿函数的问题??
-
#include<iostream> #include<thread> using namespace std; void function_1() { std::cout << "Hello,world!" << std::endl; } class Fctor { //仿函数 public: void operator()() { //对()进行重载 for (int i = 0; i > -100; i--) { cout << "from t1 " << i << endl; } } }; int main() { //Fctor fct; std::thread t1((Fctor())); //t1 starts running. 实例化一个线程对象t1 try { for (int i = 0; i < 100; i++) cout << "from main: " << i << endl; } catch (...) { t1.join(); throw; } t1.join(); //t1.detach(); return 0; }
其中这句 std::thread t1((Fctor())); 为什么要再“Fctor()”两边还要加括号?否则“ t1.join();”这句会提示错误??
还有能解释下执行结果吗?
解决方案
解决方案二:
thread要求一个线程函数,所以你不能用类名,而需要用它的仿函数。
解决方案三:
这个软件里面怎么获得C币啊,下个文档真的好麻烦。
解决方案四:
加括号表示是一个表达式,对其可以求值。而不加括号被编译器理解成一个函数,而在链接期间才发现问题无法编译通过。所以要加括号。
Fctor() :可以理解成函数名字为Fctor的函数。
(Fctor()): 作为表达式。
这是c++解析语法的时候无法区分的。。
时间: 2024-12-03 10:32:03