- 1
Class::Class(Pethu pethu) : pethu(std::move(pethu)) {
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+2
Class::Class(Pethu pethu) : pethu(std::move(pethu)) {
std::move заебал. Просто взял, блядь, — и заебал!
Чем это лучше передачи по ссылке?
MAPTbIwKA 12.11.2020 16:24 # 0
Но вообще разная семантика же совершенно.
Мув: Я умираю, вот тебе мой петух, храни его, теперь он твой
Ссылка: Могу одолжить тебе своего питуха на недельку
guest6 12.11.2020 16:35 # 0
Как сейчас:
Вот тебе копия петуха, делай что хочешь. А я его муваю себе в конструкторе.
А я хочу:
Вот тебе отдалживаю петуха, копируй его себе сам, если хочешь.
MAPTbIwKA 12.11.2020 16:42 # 0
guest6 12.11.2020 17:39 # 0
MAPTbIwKA 12.11.2020 17:43 # 0
gost 12.11.2020 16:49 # 0
Обычно просто T (без const & или &&) принимают тогда, когда функция в любом случае будет копировать себе переданного петуха. То есть вместо
Пишут просто
MAPTbIwKA 12.11.2020 17:20 # 0
если тебе не жалко уничтожить питуха на вызываемой стороне, то можно же передать ссылку, и мувнуть.
Если тебе того петуха жалко, то просто копируй, и теки
а так ты сначала его создаешь копированием, а потом сразу же отправляешь на компост
Kypumca_rpuJlb 12.11.2020 17:47 # 0
А я привела пример, где коньстантность сохраняется.
В обоих случаях нахуй нужен «std::move» кроме как выебнуться - я не понимаю.
bormand 12.11.2020 18:04 # +1
Теперь даже курицам всё понятно?
guest6 12.11.2020 18:09 # 0
bormand 12.11.2020 18:14 # 0
gost 12.11.2020 18:17 # 0
std::forward<T> только.
bormand 12.11.2020 18:18 # +1
Опечатался, я его не так часто юзаю. В реальном примере на ideone он есть.
1024-- 15.11.2020 11:41 # 0
https://youtu.be/l_--ewb4YXg
Предсказываю, кресты уже через несколько лет будут использоваться только там, где используется ассемблер - в микроконтроллерах и в задачах, где нужен пердолинг за лишний 1% производительности.
Я уже говорил, что так концентрироваться на внешней шелухе (педерача значений, по значению, ссылке, питузу, консатному питуну на консатный петху) вместо решаемой задачи - это нездоровая питушня, связанная с тормозами компьютеров в прошлом веке. Сейчас дешевле, быстрее и надёжнее написать программу на более ссылочно прозрачном языке, чем C++.
Широко использоваться будут простые динамические питухи вроде JS с уклоном на зомбирующих дуракозащищающих питухов вроде python - легко найти дешёвого программиста и написать небольшой-средний проект.
Для средних-крупных проектов будет использоваться слабофункциональные языки - питушня с замыканиями и неизменяемыми данными или фреймворками для организации этого, ленивыми питухами. В отличие от тру функциональщины будет разрешена локальная нечисть в пределах функции или файла, но между модулями уже будут гулять только константные питухи.
1024-- 15.11.2020 11:56 # 0
const в C++ - формально приятная питушня, которая уменьшает количество проблем, но только в мечтах крестухов.
Здесь всё то же самое, как и в ООП. Вроде всё логично и хорошо, но на практике - бюрократия в электронном виде, где работник общественной уборной не имеет право заменить клиенту рулон бумаги, и приходится ждать десять тактов до прихода оберпапирмейстера. А потом, когда заказчик попросит сделать двойные уборные для влюблённых, окажется, что всё надо переписывать или вносить в стройную иерархию классов говно.
const тоже сначала долго прикидывается твоим бро, но ведёт себя как последнее говно, когда при изменении задачи тебе надо его куда-нибудь добавить или откуда-нибудь снять. Приходится просматривать всю диаграмму дейта флоу, следить за тем, чтобы в некоторых местах не копировали значение, чтобы не тратить память или получать по ссылке желаемые изменения, а в некоторых - наоборот копировали, чтобы не получать нежелательные изменения. Более того, если мы пишем чёрный ящик, который принимает const Pethu, то мы только гарантируем, что объект Pethu не сломает чёрный ящик. Но никто не гарантирует, что объект Pethu не сломает чёрный ящик. (Привет винительному питуху)
defecate-plusplus 15.11.2020 11:57 # 0
Как там в 2014? Небось, бакс по 30?
1024-- 15.11.2020 12:44 # 0
Гроб C++ ещё не достаточно хорошо закопали в поле микроконтроллеров, язык жив и грязный императивный подход всё ещё вызывает миллионы баттхёртов по всему земному диску шару.
bormand 12.11.2020 17:25 # +1
С константной ссылкой клиент не может сказать "мне этот петух больше не нужен, забирай". И приходится ради него писать вторую версию функции с &&.
Можно, конечно, через универсальную ссылку сделать, но она только в шаблонах работает и надувает бинарь.
А с передачей по значению одна функция пригодна и для копирования и для мува. В итоге меньше копипасты и меньше говна в бинаре.
guest6 12.11.2020 17:43 # 0
MAPTbIwKA 12.11.2020 17:44 # 0
bormand 12.11.2020 17:46 # 0
MAPTbIwKA 12.11.2020 17:47 # 0
Это говорит ВЫЗЫВАЮЩАЯ сторона? Тогда нахуя ВЫЗВАЕМЫЙ код делает Mov?
bormand 12.11.2020 17:48 # 0
Да, примеры приведены с вызывающей стороны. И они в общем-то ничем не отличаются от классических const & и &&.
> нахуя ВЫЗВАЕМЫЙ код делает Mov
А нахуя вызываемой стороне копировать аргумент, который всё равно сдохнет в конце вызова? Вполне логично, что вызываемый код его мувает.
MAKAKA 13.11.2020 04:01 # 0
Просто если вызывающая сторона сделает Move, то она разрушит своего питуха.
В случае же ссылки мы могли бы вообще ничего никуда не копировать, если мы знаем, что петух будет жить дольше вызывемой стороны..
Кстати, а можно сделать два конструктора: один получает питуха по ссылке, другой по значению, и вызывающая сторона выбирает:
* скопировать
* мувнуть
* передать ссылку
Или в С++ вызывающая сторона такие вещи не решает, если только там не указатель?
Kypumca_rpuJlb 12.11.2020 17:55 # +1
Борманд умный, я за Борманда!
Kypumca_rpuJlb 12.11.2020 17:49 # 0