cpp-ru / ideas

Идеи по улучшению языка C++ для обсуждения
https://cpp-ru.github.io/proposals
Creative Commons Zero v1.0 Universal
89 stars 0 forks source link

Не добавлять std::shift_left и std::shift_right, а добавить std::move_n и std::move_backward_n #313

Closed apolukhin closed 3 years ago

apolukhin commented 3 years ago

Перенос предложения: голоса +1, -1 Автор идеи: Олег Фатхиев

В 20 стандарт собираются добавить функции std::shift_left и std::shift_right, которые делают практически то же самое, что и std::move и std::move_backward за исключением того, что в качестве параметра для сдвига они принимают количество позиций, на которые нужно сделать сдвиг, а не итератор. Выглядит схоже с функциями вроде std::generate_n, и тд., которые также принимают количество, а не итератор.

Как известно, у многих алгоритмов в c++ есть версии с суфиксом "_n", которые означают, что в качестве индикации прекращения выполнения нужно руководствоваться количеством действий, а не итератором, до которого эти действия выполнять. В с++20 собираются ввести функции std::shift_left и std::shift_right. Само их наличие обосновано и, если бы эти функции существовали уже давно, не было бы никаких претенция. Но, как уже было сказано, есть функции с префиксом "_n". Предлагаю переименовать функции std::shift_left и std::shift_right в std::move_n и std::move_backward_n, которые бы имели такую же сигнатуру

apolukhin commented 3 years ago

AlexanderFadeev, 5 июля 2018, 14:48 С такими названиями будет происходить путаница с std::move

Саша Зайцев, 6 июля 2018, 15:42 Я против, так как из названия не понятно, что оно делает. А std::shift_куда сразу понятно, что мы будем делать.

И что-то мне вспоминается, что такой вариант предлагали уже в обсуждении в гуглогруппах.

apolukhin commented 3 years ago

C++20 случился, менять уже что-либо поздно