2
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;
}
4

3 回答 3

4

像这样的行:

void some_function();

只需声明一个稍后将定义的函数。函数不一定必须在函数范围之外声明。

于 2010-09-15T02:21:19.583 回答
1

正如您所想,这只是一个函数声明。将函数声明放在头文件中是很常见的(也是推荐的),但这绝不是必需的。它们可能在函数体中。

于 2010-09-15T02:20:58.097 回答
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 );
于 2010-09-15T02:22:18.460 回答