std::thread f()
{
void some_function(); // <- here
return std::thread(some_function);
}
std::thread g()
{
void some_other_function(int); // <- here
std::thread t(some_other_function,42);
return t;
}
答案 0 :(得分:4)
如下的行:
void some_function();
简单地声明一个稍后定义的函数。函数不一定必须在函数范围之外声明。
答案 1 :(得分:1)
这只是一个函数声明,正如您所想。将函数声明放在头文件中是很常见的(也是推荐的),但这绝不是必需的。他们可能在职能机构中。
答案 2 :(得分:1)
定义一个返回thread
对象的函数:
std::thread f()
{
声明一个extern
函数,没有返回void
的参数(通常这不是在本地范围内完成,但它是有效的):
void some_function();
启动执行该函数的线程,并返回一个句柄:
return std::thread(some_function);
}
与以前相同的交易:
std::thread g()
{
void some_other_function(int);
但这无效。你不能复制一个线程,所以从技术上讲,制作一个本地thread
对象然后返回它是不行的。如果编译好了,我会感到惊讶,但如果确实如此,那么在为调试器构建时它可能会中断。
std::thread t(some_other_function,42);
return t;
}
但这会奏效:
return std::move( t );