ФлеймФорумЮмор

Перлы Форума Gamedev.ru (518 стр)

Страницы: 1517 518 519 520523 Следующая »
#7755
23:27, 8 мая 2024

Имбирная Ведьмочка
> Так нельзя, к моменту возврата функции пункт назначения ссылки будет уже протухнут.
А, ну да, оно же извлечется из контейнера. Ну по значению значит.

> Копирование хоть и тонкое, но всё же лишнее; а в крестах стараются придерживаться принципа
Мне кажется оптимизатор должен выкинуть это копирование, если переменная не используется. Все промежуточные классы оно же выкидывает. Вся std либа на это опирается. И из-за этого в дебаг режиме всё лютейше тормозит при использовании std

#7756
0:32, 9 мая 2024

Имбирная Ведьмочка
> стд::мув изначально сам кривой. Если бы у него не было тупой перегрузки на Т конст&
У `std::move()` нет перегрузок — они ему просто не нужны:

template<typename _Tp>
constexpr typename std::remove_reference<_Tp>::type&&
move(_Tp&& __t) noexcept
{ return static_cast<typename std::remove_reference<_Tp>::type&&>(__t); }
#7757
0:40, 9 мая 2024

Dinosaur
Универсальная ссылка - считай перегрузка.

#7758
1:34, 9 мая 2024

MrShoor
> Универсальная ссылка
Так здесь по-другому нельзя, потому что `move(T t)` будет копировать передаваемые в него именованные объекты, а в `move(T& t)` нельзя передать, например, безымянные объекты.

#7759
2:30, 9 мая 2024

Dinosaur
> У `std::move()` нет перегрузок — они ему просто не нужны:
Значит не хватает гардов. std::move от константной ссылки должен давать ошибку компиляции.

#7760
2:41, 9 мая 2024

Элементарно дописать

    static_assert(
        !std::is_const_v<std::remove_reference_t<_Tp>>,
        "Attempt to pass a const value into std::move");

И всё, больше никаких внезапных копирований.

#7761
3:18, 9 мая 2024

Имбирная Ведьмочка
> std::move от константной ссылки должен давать ошибку компиляции.
Никто не мешает сделать сделать тип с конструктором и/или `operator =`, принимающим константную rvalue-ссылку. Не std::move-у решать, для каких типов его можно использовать. Название у него, может, и не самое удачное, т.к. сам он ничего не перемещает, но написание чего-нибудь вроде `std::as_rvalue_reference()` везде, где нужно обратиться к конструктору/оператору перемещения, было бы не меньшим трэшем.

#7762
3:42, 9 мая 2024

Dinosaur
> std::as_rvalue_reference
str::rvalue() достатчно. Не обязательно писать std::cast_to_real_rvalue_reference_and_return_it()

#7763
(Правка: 7:39) 7:36, 9 мая 2024

Dinosaur
> Никто не мешает сделать сделать тип с конструктором и/или `operator =`, принимающим константную rvalue-ссылку.
Никто, кроме здравого смысла. Это бред из той же категории, что и void operator== — синтаксически допустимо, но в реальности это бессмысленная хрень, которую не пропустят ни на одном код ревью.

#7764
10:33, 9 мая 2024

Имбирная Ведьмочка
> Эти твои додумки только затем и нужны, что стд::мув изначально сам кривой. Если бы у него не было тупой перегрузки на Т конст& — то никакие лишние приседания бы и не понадобились.
я тебе уже объяснил почему мув такой какой он есть, печально что ты это до сих пор не понял. И как проверить на мувабельность тоже показал, но ты зачем то решил воспользоваться проверкой is_const которая в данном случае костыль не решающий толком проблемы, а лишь гримируя её.

#7765
13:03, 9 мая 2024

Aroch
> я тебе уже объяснил почему мув такой какой он есть, печально что ты это до сих пор не понял
Для шаблонного метакода могли бы ввести move_if_not_const

Aroch
> И как проверить на мувабельность тоже показал
А покажи ещё, как сделать так, чтоб невозможно было НЕ проверить на мувабельность?
Я вот отсылаю код на ревью, в нём куча std::move, это теперь мне надо каждый заменить на nda_project::move_only_non_const?

#7766
15:25, 9 мая 2024

1 frag / 2 deaths
> А покажи ещё, как сделать так, чтоб невозможно было НЕ проверить на мувабельность?
что тебе не понятно с предыдущей страницы? Не умеешь писать концепты? Страдай тогда. Ну или по старинке наследуйся и вешай ограничения в базовых классах.

+ Показать
#7767
(Правка: 16:01) 15:46, 9 мая 2024

Aroch
> я тебе уже объяснил почему мув такой какой он есть, печально что ты это до сих пор не понял.
Где? "Потому что в кишках стл на нём уже висит мегатонна легаси", это вот это было объяснение? Это "объясняет" только то, почему функцию не переделывают сейчас, но не почему она изначально такая всратая.

Aroch
> И как проверить на мувабельность тоже показал, но ты зачем то решил воспользоваться проверкой is_const которая в данном случае костыль не решающий толком проблемы, а лишь гримируя её.
А какая разница? Суть одна — если тонким перемещением обойтись нельзя, то это ошибка компиляции. Проверка на конст это вполне решает. Пример с сетом такая конструкция бы поймала.

#7768
16:00, 9 мая 2024

Имбирная Ведьмочка
> А какая разница?
большая разница, если объект поддерживает копирование, то все вопросы к объекту а не к муву.

#7769
16:06, 9 мая 2024

Aroch
> большая разница, если объект поддерживает копирование, то все вопросы к объекту а не к муву.
(Петух конст&) биндится и под Петух рвалью, Петух&& просто перехватывает приоритетом при наличии. Статик_ассёрт в муве проверяет не наличие специализации в классе, а принципиальную возможность для одного конкретного выражения.

Страницы: 1517 518 519 520523 Следующая »
ФлеймФорумЮмор