Войти
ПрограммированиеФорумОбщее

Обмен значений переменных. (комментарии) (4 стр)

Страницы: 1 2 3 4 5 Следующая »
#45
0:32, 30 янв. 2014

laMer007
http://ideone.com/Ydig1M


#46
0:34, 30 янв. 2014

Hardcode
Это частный случай. Холодно. Специализации бывают частичными. (Эх, слишком крупно подсказал...)

#47
0:38, 30 янв. 2014

laMer007
http://ideone.com/Suf1m6
http://ideone.com/zrXUyM

Покажи хоть кусок кода, который не будет работать.

#48
0:54, 30 янв. 2014

Hardcode
На счет первого

+ Показать
не отвечу точно. Мне и самому интересно. Но лезть в стандарт не хочу. Может кто знает? Ну кроме общих фраз типа есть способ лучше и его лучше использовать всегда вместо этого и того что было в нулевом коде
+ Показать

Второй код соответственно нельзя использовать. Это просто нарушение интерфейса и стандарта. В промышленном коде поэтому использовать его сомнительно. Его даже не обсуждаем.
И так первый код допустим разрешён, в чем я сомневаюсь, но это частный случай. Мы же говорим про общий. Допустим Foo<T1, T2>. Приведите код для подмены swap?

PS: Kartonagnick ниже почти всё испортил объяснил. (:

#49
1:04, 30 янв. 2014

Вызываем оптимальную функцию, на примере std::swap и её специализации в разных пространствах имен.

+ Показать
#50
1:07, 30 янв. 2014

laMer007
Вот стандарт:
[lib.reserved.names]  17.4.3.1 Reserved names
It is undefined for a C  + + program to add declarations or definitions to namespacestdor namespaces
within namespace std unless otherwise specified.  A program may add template specializations for any
standard library template to namespace std.  Such a specialization (complete or partial) of a standard
library template results in undefined behavior unless the declaration depends on a user-defined name of
external linkage and unless the specialization meets the standard library requirements for the original tem
plate.
163)

Насчет второго кода, никто и не говорил, что он хороший :)
И мне хотелось бы увидеть пример "полезного" кода, который не попадает в первый вариант.

#51
1:10, 30 янв. 2014

Kartonagnick
laMer007
Не могу сходу вспомнить, где свап юзается в стл, хотелось бы посмотреть, использует ли он using std::swap?
UPD: Я туплю, он и так находится в std неймспейсе, там не надо

#52
1:15, 30 янв. 2014

Hardcode
> где свап юзается в стл
std::iter_swap. В #include <algorithm> в нескольких функциях должно быть как минимум. Но не поможет)

#53
1:15, 30 янв. 2014

Kartonagnick
Это хороший способ, но мало кто пишет using std::swap. 50% пишут using namespace std и у них подцепится наша оптимизированная функция, 50% пишут std:: и у них она не подцепится.

#54
1:18, 30 янв. 2014

Hardcode
> 50% пишут using namespace std
Хреново им.

Ну а вообще про std::swap Маерс нормально всё описал в своей "Эффективное использование C++".
Только вот о чем спор так и не понятно :)

#55
1:47, 30 янв. 2014

MATov
Изначально спор был из-за этого:

Так делать не желательно. Как минимум возможная потеря производительности из-за std::. Это не шутка.

И теперь я таки вынужден согласиться, что существует небольшое количество случаев, когда лучше будет написать using std::swap; swap(value1, value2); чем просто std::swap.
Хотя я даже не уверен, о каких именно случаях говорил laMer007

#56
1:50, 30 янв. 2014

Hardcode
> Хотя я даже не уверен, о каких именно случаях говорил laMer007
Напишите код swap для Foo<T1, T2>.

#57
1:51, 30 янв. 2014

Hardcode
> Хотя я даже не уверен, о каких именно случаях говорил laMer007

В тех случаях, когда для класса определен свой swap внутри класса, эффективный и специфичный для него, что бы не делать тупого копирования.

#58
1:52, 30 янв. 2014

laMer007
Сойдет и Foo<T1>

#59
1:54, 30 янв. 2014

Hardcode
> Сойдет и Foo<T1>
Здесь содержится, я так понимаю, ещё и ответ на мой вопрос относительно первого вашего кода для тех кому не лень лезть в стандарт?

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

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