Open Neargye opened 3 years ago
amlet 11 апреля 2019, 7:46 5 минусов, и ни одного комментария... Приведённый пример конечно диковатый, но реально плюсы с каждым новым стандартом становятся всё больше противоречащими себе:
auto a = ... ; // копируется значение
auto & a = ... ; // а вот мы явно указываем на ссылочный тип
decltype(auto) a = ... ; // сохраняем тип для a выражения справа
и тут неожиданно:
auto [a, b] = ... ; // сохраняем типы исходя выражений справа, даже если там ссылки
Может реально как-то более одинаково похожие выражения вести себя должны? Может реально выражение:
decltype(auto) [a, b] = ... ;
auto & [a, b] = ... ;
были бы лучше?
Я с вами полностью согласен, но сейчас уже нет возможности что-то менять. Подобные правки сломают пользовательский код :(
Перенос предложения: голоса +0, -5 Автор идеи: Даниил Милютин
Текущая реализация structured binding (SB) не соответствует семантике auto. Хочется чтобы для SB работали обычные правила auto для переменных.
В общем случае хочется следующее
Сейчас это не так. Рассмотрим примеры в коде. (Код примеров см. также здесь.)
Хочется, чтобы при использовании auto без ref-modifiers выводились не ссылочные типы, а значения.
Расскажу, как я на это наткнулся.
Решил я написать свой zip для коллекций. В итоге успешно взял код отсюда
Проблема была в том, что я использовал zip с постоянными коллекциями примерно так :
zip_helper::iterator по постоянным коллекциям при разименовании возващает tuple состоящий из const ссылок. Тип x,y выведен как постоянная ссылки. И причина как раз в том как работает SB. Для получения желаемой временной переменной писал следующий костыль (потом по-другому починил, но это другая история)
Получается, что в этом случае SB портят жизнь и увеличивают объём кода. И, как я уже объяснил выше, не соответствует семантике auto.