将void
声明为void*
和std::thread
之间是否有区别?
void encrypt(/*parameters*/)
{
}
// ...
std::thread(encrypt, /*arguments*/);
我刚刚阅读了有关在互联网上使用void*
线程的内容,并希望确保我使用void
而不是void*
是有充分理由的。我一般都在强调我写的东西太多了。
答案 0 :(得分:5)
是的。例如这个函数:
void func() { }
状态良好。另一方面,这一个:
void* func() { }
违反语言限制,并且格式不正确。区别?您不能省略return语句,否则您的程序将有未定义的行为。
在这种情况下, void
指定缺少返回类型,但void*
是完整类型,因此您必须为要返回的函数指定值。
在std::thread
的上下文中,您应将其指定为void
。无论如何,任何返回值都会被忽略,所以只需保持程序的良好形成,而不是为了它而返回一些毫无意义的东西。
如果您在线阅读有关Pthreads的信息,那么他们做期待一个接受并返回void*
的回调。这样他们就可以支持任何参数和任何返回类型。但那是一个C API,所以必须这样做。 std
中的惯用C ++ API是类型感知的。所以void
就是这样。如果您关心返回值,请查看std::future
。