Open apolukhin opened 3 years ago
smertigdon, 6 июля 2017, 16:56 Думаю, что идея не зайдёт. Все текущие унарные операторы имеют реальный смысл и без перегрузок. А что такое %x для decltype(x) == int? И я уверен, что ради такого наделять %, ^ и прочие бинарные операторы унарным смыслом не будут
post-increment, 7 июля 2017, 19:39 Ответил ниже.
post-increment, 7 июля 2017, 19:39 Дополнение и ответ smertigdon. Моё предложение рассматривает расширение в том числе бинарных операторов на унарные .
Перенос предложения: голоса +2, -12 Автор идеи: post-increment
В С++ присутствуют операторы, которые используются, как унарные и как бинарные (+, *, &). Идея состоит в том, чтобы расширить использование некоторых операторов:
В текущей реализации С++ мы можем писать следующие выражения
Парсер языка не имеет сложностей с разбором такого кода. Также мы можем писать следующие выражения
Хотелось бы для последних операторов иметь унарные или бинарные аналоги.
Возможно для целочисленных и иных встроенных типов это (пока что) не имеет семантического смысла. Для пользовательских типов такой подход был бы интересен.
Касаемо приоритетов. Если рассмотреть таблицу http://ru.cppreference.com/w/cpp/language/operator_precedence, то все унарные (и предлагаемы тоже) префиксные операторы соответствуют строке 3.
Приоритет бинарных операторов - вопрос обсуждаемый.
С точки зрения реализации видится, что потребуется подход аналогичный для операторов +,*,&.
Как я вижу, совместимость со старым кодом не нарушается.
Вопрос того, какие операторы расширять, обсуждаем.
Добавлю, что перегрузка операторов предполагается аналогичной той, что уже есть. Например, для свободных функций объявление такое:
Прошу написать ваше видение. Интересно, какие плюсы и минусы вы видите в этой идее.