«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Помимо операторов if: где еще можно использовать тип с явным преобразованием bool без приведения?

Помимо операторов if: где еще можно использовать тип с явным преобразованием bool без приведения?

Опубликовано 21 ноября 2024 г.
Просматривать:952

Beyond `if` Statements: Where Else Can a Type with an Explicit `bool` Conversion Be Used Without Casting?

Контекстное преобразование в bool разрешено без приведения

Ваш класс определяет явное преобразование в bool, что позволяет использовать его экземпляр 't' непосредственно в условных операторах. Однако это явное преобразование ставит вопрос: где еще можно использовать 't' в качестве логического значения без приведения?

Сценарии контекстного преобразования

Стандарт C определяет четыре основные сценарии, в которых значение может быть контекстуально преобразовано в bool:

Операторы:

  • if, while, for, do- while операторы

    if (t)
      /* statement */;

Выражения:

  • Отрицание (!), логическое И (&&), логическое ИЛИ (||), тернарный оператор (?)

    !t
    t && t2

Тесты времени компиляции:

  • static_assert, noException, явный, if constexpr (требуется преобразование constexpr оператор)

    static_assert(t);
    noexcept(t)

Алгоритмы и концепции:

  • NullablePointer, аргументы предиката или компаратора в алгоритмах STL

    NullablePointer T
    std::remove_if(first, last, [&](auto){ return t; });

Дополнительные примечания:

  • Сужающие преобразования целых чисел, отличных от 0 и 1, не допускаются в тестах во время компиляции (C 26 и далее).
  • Смешение константных и неконстантных операторов преобразования может привести к путанице.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3