Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Operators

Boost , ,

Operators

Lazy operators

Этот объект обеспечивает механизм для ленивой оценки операторов. Синтактически ленивый оператор выглядит и чувствует себя как обычный C/C++ инфикс, префикс или постфикс-оператор. Приложение оператора выглядит одинаково. Однако, в отличие от обычных операторов, фактическое исполнение оператора откладывается. Образцы:

    arg1 + arg2
    1 + arg1 * arg2
    1 / -arg1
    arg1 < 150

Мы видели ленивых операторов в действии (см. Давайте вернемся и проверим его немного дальше:

    find_if(c.begin(), c.end(), arg1 % 2 == 1)

Через перегрузку оператора выражение "arg1% 2 == 1 " фактически генерирует композит. Этот композиционный объект передается функции STL find_if. По мнению STL, композит - это просто фанктор, ожидающий одного аргумента - элемента контейнера. Для каждого элемента в контейнере «с» элемент передается как аргумент (arg1) в композицию (functor). Композиционный (функтор) проверяет, является ли это странным значением на основе выражения "arg1% 2 == 1 " , где arg1 итеративно заменяется элементом контейнера.

Набор классов реализует все C++ бесплатные операторы. Как и ленивые функции (см. функции), ленивые операторы не исполняются сразу, когда на них ссылаются. Вместо этого создается композитный (см. композитный) объект и возвращается к звонителю. Пример:

    (arg1 + arg2) * arg3

не более чем возвратить композит. Второй вызов функции будет оценивать фактических операторов. Пример:

    int i = 4, j = 5, k = 6;
    cout << ((arg1 + arg2) * arg3)(i, j, k);

будет распечатать "54 " .

Арбитражно сложные выражения могут быть лениво оценены по трем простым правилам:

  1. Лениво оцененные двоичные операторы применяются, когда *по крайней мере* один из операндов является актерским объектом (см. актер, примитивы и композит). Следовательно, если один из операндов не является объектом-актером, он по умолчанию неявно преобразуется в объект типа-актер>(где T является первоначальным типом операнда).
  2. Лениво оцененные унарные операторы относятся только к операндам, которые являются объектами-актерами.
  3. Результатом ленивого оператора является составной актерский объект, который в свою очередь может применяться к правилу 1.

Пример:

    -(arg1 + 3 + 6)
  1. Следуя правилу 1, ленивая оценка запускается, поскольку arg1 является примером актера<аргумент>класса (см. Примитивы).
  2. Непосредственно правый операнд<3>неявно превращается в актера>. Соблюдать правило 1.
  3. Результатом этого выражения "arg1 + 3" является составной объект, следующий правилу 3.
  4. Теперь, поскольку "arg1 + 3" является составным, следуя правилу 1, его правый операнд<6>неявно превращается в актера>.
  5. Продолжая, результат "arg1 + 3" ... " + 6" снова является еще одним составным. Правило 3.
  6. Выражение "arg1 + 3 + 6" являясь составным, является операндом унарного оператора -. Согласно правилу 2, результатом является объект-актер.
  7. В соответствии с правилом 3, вся вещь "-(arg1 + 3 + 6)" является составной.

Применение Lazy-operator очень заразно. В большинстве случаев один актер argN заражает всех своих ближайших соседей в группе (первый уровень или выражение родительского размера).

Обратите внимание, что хотя, по крайней мере, один из операнд должен быть действительным классом актера для того, чтобы ленивая оценка вступила в силу, если это не так, и мы все еще хотим лениво оценить выражение, мы можем использовать var(x), val(x) или const(x) для преобразования операнда в действительный объект действия (см. примитивы). Пример:

    val(1) << 3;

Поддерживаемые операторы:

Неработающие операторы:

    prefix:   ~, !, -, +, ++, --, & (reference), * (dereference)
    postfix:  ++, --

Бинарные операторы:

    =, [], +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=
    +, -, *, /, %, &, |, ^, <<, >>
    ==, !=, <, >, <=, >=
    &&, ||


Статья Operators раздела может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-23 14:17:02/0.0039448738098145/0