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

时间:2018-11-09 01:30:10

标签: c++ syntax comma-operator

我在阅读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();
    }

还是没有区别?

1 个答案:

答案 0 :(得分:4)

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

我个人会专门使用分号,因为逗号运算符(在极少数情况下,它在for循环增量步骤之外使用)表示返回值很重要,但是join是{ {1}}返回类型使逗号运算符的功能毫无意义; void同样正确,并且消除了对逗号运算符是否正在发生任何麻烦的疑问。