ФлеймФорумПрограммирование

обмен значений без третьей переменной (3 стр)

Страницы: 1 2 3 4 Следующая »
#30
3:21, 13 мар 2008

Кирюшык
>Ещё три раза проверил. Работает.
три раза? маловато.
надо проверить на всех более мене популярных платформах. на всех компиляторах. на всех версиях компиляторов. вот когда проверишь, тогда можешь смело говорить - работает.

#31
3:24, 13 мар 2008

кстати, в исходном посте не написано, что переменная имеет оператора -,+, ^
да и вообще, на современных процессорах эти хитроумные арифметические варианты будут значительно уступать по скорости копированию во временную переменную.

так что самый правильный вариант - std::swap(a, b)

#32
11:17, 13 мар 2008

NULL_PTR

Дошло, извиняюсь. Ступил поздно ночью, не подумал, что может сначала быть использован результат присваивания, а уже потом выполнена сама запись в переменную.

#33
11:51, 13 мар 2008

x ^= y  ^= x ^= y;
Что это все про какой-то UBговорят? Все нормально будет. x и y поменяются...

#34
12:01, 13 мар 2008

alex19921992
Так UB на то и UB, что может нормально, а может и нет :)

#35
12:40, 13 мар 2008

Кошмар! Если ТАКИЕ вопросы задают а форуме ...

#36
14:16, 13 мар 2008

Вроде самого быстрого варианта ещё не было.

xchg eax,ecx

#37
14:49, 13 мар 2008

cppguru
Пост 19 :)

#38
15:37, 13 мар 2008

А слабО для общего случая (сложные классы и т. п.)? %)

#39
15:54, 13 мар 2008

Блин, народ, я все понял

#40
16:03, 13 мар 2008

Sbtrn. Devil
Мне не слабо! Реинтерпрет каст в помощь! Но понадобится ещё одна переменная))) Дык что быстрее через третюю.

#41
17:21, 13 мар 2008

С точки зрения асемблера эта процедура должна выполняться в два считывания и в две записи в память. Все зависит от тупости компилятора )

#42
19:58, 13 мар 2008

Sbtrn. Devil
>А слабО для общего случая (сложные классы и т. п.)? %)
А что, сложные классы кто-то обменивает по значению? ;)

#43
21:40, 13 мар 2008

cppguru
подозреваю, что

mov eax, [mem1]
mov ecx, [mem2]
mov [mem1], eax
mov [mem2], ecx

будет эффективнее

#44
21:47, 13 мар 2008

Чеширский кот
>Sbtrn. Devil
>А что, сложные классы кто-то обменивает по значению? ;)

Запросто! В стл для такого случая даже swap соорудили. 8)

Страницы: 1 2 3 4 Следующая »
ФлеймФорумПрограммирование

Тема в архиве.