Можно ли в С++ поменять значения переменных за одну команду?
Пока я думаю что это можно сделать только так:
T temp = a;
a = b;
b = temp;
Получаеться выходит 3 команды, можно ли укоротить данную операцию?
Пока я думаю что это можно сделать только так:
T temp = a;
a = b;
b = temp;
Получаеться выходит 3 команды, можно ли укоротить данную операцию?
std::swap(a, b);
Но вы должны понимать, что компилятор эту операцию в любом виде и записи будет делать за несколько операций. Копированием ли, хором или ещё чем-нибудь.
для этого существует прямая инструкция процессора xchg. никаких временных переменных. и никакой иной способ не будет работать быстрей ;) но есть одна оговорка: размеры операндов должны быть меньше, или ровняться размеру регистра CPU. для 32ух битных машин это 4 байта, для 64ех - 8. или указатели. т.е. для обмена целых и указателей это наилучший способ. но не для обмена структур/объектов. и, как следствие, наилучшим решением является обменивать ссылки.
GNU assembler test: http://liveworkspace.org/code/b9a82c898c65609748ea3585dda111d9
естественно, операция атомарна. никаких "Interlocked API" не нужно ;)
a ^= b ^= a ^= b ;)