开发者社区> 问答> 正文

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();”这句会提示错误??
还有能解释下执行结果吗?
screenshot

展开
收起
a123456678 2016-03-09 09:49:13 2486 0
1 条回答
写回答
取消 提交回答
  • 加括号表示是一个表达式,对其可以求值。而不加括号被编译器理解成一个函数,而在链接期间才发现问题无法编译通过。所以要加括号。
    Fctor() :可以理解成函数名字为Fctor的函数。
    (Fctor()): 作为表达式。
    这是c++解析语法的时候无法区分的。。

    2019-07-17 18:55:25
    赞同 展开评论 打赏
问答分类:
C++
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
使用C++11开发PHP7扩展 立即下载
GPON Class C++ SFP O;T Transce 立即下载
GPON Class C++ SFP OLT Transce 立即下载