将线程函数声明为返回void和void*之间是否存在差异?

Typ*_*Hog -4 c++ multithreading pointers function void

声明一个函数std::threadvoid*我使用它之间有区别void吗?

void encrypt(/*arguments*/)
{
}

// ...

std::thread(encrypt, /*arguments*/);
Run Code Online (Sandbox Code Playgroud)

我刚刚阅读了一些关于void*在互联网上使用线程的内容,并希望确保我正在使用std::thread而不是void*有充分理由.我一般都在强调我写的东西太多了.

Sto*_*ica 6

就在这里.例如这个功能:

void func() {  }
Run Code Online (Sandbox Code Playgroud)

形成良好.另一方面,这一个:

void* func() {  }
Run Code Online (Sandbox Code Playgroud)

违反语言约束,并且格式不正确.区别?您不能省略return语句,否则您的程序将具有未定义的行为.

void在这种情况下,指定缺少返回类型,但是void*是完整类型,因此必须为要返回的函数指定值.

在上下文中std::thread,您应该将其指定为void.无论如何,任何返回值都会被忽略,所以只需保持程序的良好形成,而不是为了它而返回一些无意义的东西.

如果您在线阅读有关Pthreads的信息,那么他们确实期望接受并返回的回调void*.这样他们就可以支持任何参数任何返回类型.但那是一个C API,所以必须这样做.惯用的C++ API std是类型感知的.就是void这样.如果您关心返回值,请查看std::future.

  • @TypicalHog-哦,很好。Pthread接受并返回`void *`以支持*任何参数*和*任何返回类型*。但这是一个C API,因此必须这样做。`std`中的惯用C ++ API更了解类型。所以是“ void”。如果您确实关心返回值,请查看`std :: future`。 (2认同)