Использование запятых и точек с запятой в потоках C ++ - PullRequest
0 голосов
/ 09 ноября 2018

Я читал на 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 голосов
/ 09 ноября 2018

Это не имеет значения. И оператор запятой, и точка с запятой налагают последовательность, единственное отличие состоит в том, как обрабатываются результаты каждого выражения. Так как join имеет тип возврата void, даже эта крошечная разница не имеет значения. В любом случае, вы бы join каждая нить по порядку слева направо.

Лично я бы использовал исключительно точки с запятой, потому что оператор запятой (в редких случаях он используется вне шага приращения цикла for) подразумевает значение возвращаемых значений, но join, являющийся void типом возврата делает эту особенность оператора запятой бессмысленной; t1.join(); t2.join(); t3.join(); t4.join(); будет в равной степени правильным, и устранит любые сомнения относительно того, что с оператором запятой происходит что-то подозрительное.

...