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

在C++线程中使用逗号和分号,c++,syntax,comma-operator,C++,Syntax,Comma Operator,我在阅读时遇到了以下代码: 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(wait

我在阅读时遇到了以下代码:

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返回类型,所以即使是很小的差异也不重要。无论哪种方式,您都要按从左到右的顺序连接每个线程


就我个人而言,我会专门使用分号,因为逗号运算符很少在for循环增量步骤之外使用,这意味着返回值很重要,但是join作为void返回类型使得逗号运算符的特性毫无意义;t1.加入;t2.加入;t3.加入;t4.加入;同样正确,并且消除了关于逗号运算符是否有可疑之处的任何疑问。

这没有区别。逗号运算符和分号都要求排序,唯一的区别在于如何处理每个表达式的结果。因为join有一个void返回类型,所以即使是很小的差异也不重要。无论哪种方式,您都要按从左到右的顺序连接每个线程


就我个人而言,我会专门使用分号,因为逗号运算符很少在for循环增量步骤之外使用,这意味着返回值很重要,但是join作为void返回类型使得逗号运算符的特性毫无意义;t1.加入;t2.加入;t3.加入;t4.加入;同样正确,并且消除了关于逗号运算符是否有可疑之处的任何疑问。

最初的程序员一定卷入了一场保存行的竞赛。虽然这并不像用逗号串在一起那么糟糕,因为连接行紧密地跟踪上面的线程声明,但它不是可读性最好的。原始程序员一定卷入了一场保存行的竞赛。虽然这并不像某些字符串加逗号那样糟糕,因为连接行密切跟踪上面的线程声明,但这并不是可读性的最佳选择。Cppreference fixed Cppreference fixed