арные операторы

post-increment
post-increment

Пример языка Julia.

Operators Are Functions

In Julia, most operators are just functions with support for special syntax. (The exceptions are operators with special evaluation semantics like && and ||. These operators cannot be functions since Short-Circuit Evaluation requires that their operands are not evaluated before evaluation of the operator.) Accordingly, you can also apply them using parenthesized argument lists, just as you would any other function:

julia> 1 + 2 + 3
6

julia> +(1,2,3)
6

The infix form is exactly equivalent to the function application form – in fact the former is parsed to produce the function call internally. This also means that you can assign and pass around operators such as +() and *()just like you would with other function values:

julia> f = +;

julia> f(1,2,3)
6

Under the name f, the function does not support infix notation, however.

Подобную механику было бы интересно встроить в С++.

Что это может дать?
Основное достоинство которое мне видится это отложенные вычисления.

//with some other proposals this looks like
auto operator+(std::string&& init, std::string&&... args )
{
    return std::lazy_sum{std::forward(init), std::forward(args)...};
}

std::string sum = s1+s2+s3;
// magic is done when lazy_sum is passed to operator=
// buffer is allocated for given size then copying of data without
//    temporary strings is made


Сейчас подобное провернуть удастся с помощью binary-expression-tree.
Для чего потребуется рекурсивное определение сложения для lazy-sum и string.

Жду ваших мыслей и комментариев по этому поводу.

-5
рейтинг
1 комментарий
Павел Корозевцев
Всё, что можно сделать средствами языка, надо делать, а не тащить пропозал в ядро.
Павел Корозевцев
Другие идеи
Группа создана, чтобы собирать предложения к стандарту C++, организовывать их внутренние обсуждения, помогать готовить их для отправки в комитет и защищать на общих собраниях в рабочей группе по С++ Международной организации по стандартизации (ISO).