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

问题描述 投票:1回答:1

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

或者它没有区别?

c++ syntax comma-operator
1个回答
4
投票

没什么区别。逗号运算符和分号都强加了排序,唯一的区别在于如何处理每个表达式的结果。由于join有一个void返回类型,即使这个微小的差异并不重要。无论哪种方式,你从左到右按顺序排列每个线程的join

就个人而言,我只使用分号,因为逗号运算符(在极少数情况下它在for循环增量步骤之外使用)意味着返回值很重要,但joinvoid返回类型使得逗号运算符的这个特征毫无意义; t1.join(); t2.join(); t3.join(); t4.join();同样正确,并且删除了有关逗号运算符是否可能出现问题的疑问。

© www.soinside.com 2019 - 2024. All rights reserved.