有人可以解释以下奇怪的函数声明吗?

时间:2010-09-15 02:12:27

标签: c++ multithreading function function-declaration

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

3 个答案:

答案 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 );