Можно ли в С++ поменять значения переменных за одну команду?

Рейтинг: 1Ответов: 3Опубликовано: 05.04.2011

Пока я думаю что это можно сделать только так:

T temp = a;
a = b;
b = temp;

Получаеться выходит 3 команды, можно ли укоротить данную операцию?

Ответы

▲ 5Принят
std::swap(a, b);

Но вы должны понимать, что компилятор эту операцию в любом виде и записи будет делать за несколько операций. Копированием ли, хором или ещё чем-нибудь.

▲ 5

для этого существует прямая инструкция процессора xchg. никаких временных переменных. и никакой иной способ не будет работать быстрей ;) но есть одна оговорка: размеры операндов должны быть меньше, или ровняться размеру регистра CPU. для 32ух битных машин это 4 байта, для 64ех - 8. или указатели. т.е. для обмена целых и указателей это наилучший способ. но не для обмена структур/объектов. и, как следствие, наилучшим решением является обменивать ссылки.

GNU assembler test: http://liveworkspace.org/code/b9a82c898c65609748ea3585dda111d9

естественно, операция атомарна. никаких "Interlocked API" не нужно ;)

▲ 3

a ^= b ^= a ^= b ;)