C++ - 在线程中使用时,将函数的 return 值声明为 void/void* 之间有区别吗?

C++ - Is there a difference between declaring a function's return value as void/void* when used in a thread?

将函数的 return 值声明为 void/void* 与 std::thread 一起使用有区别吗?

void encrypt(/*arguments*/)
{
}

// ...

std::thread(encrypt, /*arguments*/);

我阅读了一些关于在使用线程时使用 void* 的内容,所以我想确保我使用 void 而不是 void* 是有充分理由的。

是的。例如这个函数:

void func() {  }

格式正确。另一方面,这个:

void* func() {  }

违反语言限制,格式错误。区别?你不能省略 return 语句,否则你的程序将有未定义的行为。

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

std::thread的上下文中,您应该将其指定为void。无论如何,任何 return 值都会被忽略,所以只要保持你的程序格式正确,不要为了它而 return 加入一些无意义的东西。

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