在C++线程中使用逗号和分号



我在cppreference.com上阅读时遇到了以下代码:

int main()
{
std::thread t1(waits, 1), t2(waits, 2), t3(waits, 3), t4(signals);
t1.join(); t2.join(), t3.join(), t4.join();
}

我想知道最后一行是不是打字错误。

不应该是这个吗:

int main()
{
std::thread t1(waits, 1), t2(waits, 2), t3(waits, 3), t4(signals);
t1.join(), t2.join(), t3.join(), t4.join();
}

还是没有区别?

没有区别。逗号运算符和分号都强制排序,唯一的区别在于如何处理每个表达式的结果。由于join具有void返回类型,所以即使是微小的差异也无关紧要。无论哪种方式,您都会按照从左到右的顺序为每个线程join

就我个人而言,我会专门使用分号,因为逗号运算符(在极少数情况下,它在for循环增量步骤之外使用(意味着返回值很重要,但joinvoid返回类型,这使得逗号运算符的特性毫无意义;t1.join(); t2.join(); t3.join(); t4.join();同样正确,并消除了对逗号运算符是否有可疑之处的任何怀疑。

相关内容

  • 没有找到相关文章

最新更新