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
.
将函数的 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
.