Прямое присвоение типов атомов c запрещено по очень веской причине. Типы Atomi c имеют ряд операций, которые выглядят как обычные операции C ++, но на самом деле они дают вам больше гарантий, чем обычно могли бы выполнять эти операции. Например, some_atomic++
- это приращение атома c (которое возвращает исходное значение), а some_int++
- это просто целочисленное приращение без гарантий видимости или атомарности.
Если вы делаете что-то вроде atomic2 = atomic1
может сложиться впечатление, что все это выражение представляет собой атом c, что это атом c для чтения / изменения / записи двух переменных. Это не так; это будут две последовательные атомы c операции: чтение atomic1
и запись atomic2
. Две последовательные операции атома c не совпадают с одной операцией атома c.
Чтобы точно понять, что не происходит , они заставляют вас произнести это по буквам out: atomic2 = atomic1.load(...)
.