С помощью следующего метода мы можем поменять местами две переменные A
и B
A = A XOR B
B = A XOR B
A = A XOR B
Я хочу реализовать такой метод на С++, который работает со всеми типами (int, float, char,...), а также со структурами. Как мы знаем, все типы данных, включая структуры, занимают определенное место в памяти, например, 4 байта, 8 байтов.
На мой взгляд, этот метод подкачки должен работать со всеми типами, кроме типов, основанных на указателях. Он должен обменивать содержимое памяти, то есть биты, двух переменных.
Мой вопрос
Я понятия не имею, как реализовать такой метод на C++, который работает со структурами (которые не содержат указателей). Кто-нибудь может мне помочь, пожалуйста?
std::swap(...)
. cplusplus.com/reference/algorithm/swap - person clstrfsck   schedule 13.06.2014std::swap( a, a )
. Алгоритм xor в этом случае не работает и поэтому бесполезен в качестве обычной процедуры подкачки. - person James Kanze   schedule 13.06.2014sizeof(class)
, если вы примените к классу трюк XOR. Поскольку он игнорирует логическое содержимое класса, трюк XOR не будет преследовать управляемую память, он просто заменит указатели. - person cmaster - reinstate monica   schedule 13.06.2014sizeof(class)
= 10 Мб. Другие экземпляры хранят указатели на данные в этом классе (по дизайну). Помимо долгой работы, это также может повредить классы. ИМО, опускание операторов перемещения/копирования или операторов присваивания во время такого обмена также является плохой идеей. - person Spook   schedule 13.06.2014sizeof(class)
== 10 МБ, правильный конструктор перемещения должен, тем не менее, касаться всех 10 МБ. Перемещение может быть быстрее копирования, только если есть что-то, что не включено в сам объект, т.е. е. размещены в куче. Но мы уходим далеко от темы. - person cmaster - reinstate monica   schedule 13.06.2014