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

Relational operators

Boost , Boost.Optional , Tutorial

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Типнеобязательно<T>является.РавенствоВсякий раз, когдаTРавенство. Два необязательных объекта, содержащих значение, сравниваются так же, как и содержащиеся в них значения. Неинициализированное состояниефакультативно<T>рассматривается как отдельное значение, равное самому себе и неравное любому значению типа.T:

boost::optional<int> oN = boost::none;
boost::optional<int> o0 = 0;
boost::optional<int> o1 = 1;
assert(oN != o0);
assert(o1 != oN);
assert(o0 != o1);
assert(oN == oN);
assert(o0 == o0);

Конструктор преобразования изT, а также изповышения::ни одинне подразумевает существования и семантики смешанного сравнения междуTифакультативным<T>, а также междуno_tиопциональным<T:

assert(oN != 0);
assert(o1 != boost::none);
assert(o0 != 1);
assert(oN == boost::none);
assert(o0 == 0);

Это смешанное сравнение имеет практическое толкование, которое иногда полезно:

boost::optional<int> choice = ask_user();
if (choice == 2)
    start_procedure_2();

В приведенном выше примере значение сравнения — «выбранное пользователем число 2». Если пользователь ничего не выбирал, он не выбирал номер 2.

В случае, еслифакультативный<T>сравнивается сни с одним, не требуется, чтобыTбылСравнимое равенство.

Аналогичным образом, типнеобязательный<T>являетсяLessThanComparableвсякий раз, когдаTявляетсяLessThanComparable. Факультативный объект, не содержащий значения, сравнивается с любым значениемT. Чтобы проиллюстрировать это, если по умолчанию упорядочиваниеsize_tявляется {0,1,2, ...}, по умолчанию упорядочиваниенеобязательно<size_t>является {повышением,0,1,2, ...}. Этот порядок не имеет практического толкования. Цель состоит в том, чтобы иметь любой семантически правильный порядок по умолчанию для того, чтобыфакультативный<T>мог использоваться в упорядоченных ассоциативных контейнерах (где быTне использовался).

Смешанные реляционные операторы являются единственным случаем, когда содержащееся значение необязательного объекта может быть проверено без использования функции доступа к значениюоператор*,значение,значение_или.


PrevUpHomeNext

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




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



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


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 23:26:06/0.0065951347351074/0