#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();”这句会提示错误??
还有能解释下执行结果吗?
加括号表示是一个表达式,对其可以求值。而不加括号被编译器理解成一个函数,而在链接期间才发现问题无法编译通过。所以要加括号。
Fctor() :可以理解成函数名字为Fctor的函数。
(Fctor()): 作为表达式。
这是c++解析语法的时候无法区分的。。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。