Логические операторы
Возвращает результат булевого оператора.
| Имя оператора | Синтаксис | Перегружаемый | Примеры прототипов (для class T) |
|
|---|---|---|---|---|
| Внутри определения класса | Вне определения класса | |||
| отрицание |
not a
| Да |
bool T::operator!() const; |
bool operator!(const T &a); |
| И |
a and b
| Да |
bool T::operator&&(const T2 &b) const; |
bool operator&&(const T &a, const T2 &b); |
| включительно ИЛИ |
a or b
| Да |
bool T::operator||(const T2 &b) const; |
bool operator||(const T &a, const T2 &b); |
Примечания
|
||||
Объяснение
Выражения логических операторов имеют вид
! правый операнд | (1) | |
левый операнд && правый операнд | (2) | |
левый операнд || правый операнд | (3) |
Если операнд не bool, он преобразуется в bool с помощью контекстного преобразования в bool: он является корректным только в том случае, если объявление bool t(arg) корректно для некоторой вымышленной временной переменной t.
Результат — bool prvalue.
Для встроенного логического оператора НЕ результат — true если операнд — false. В противном случае результат — false.
Для встроенного логического оператора И результат — true если оба операнда — true. В противном случае результат — false Этот оператор является короткозамкнутым: если первый операнд — false, второй операнд не вычисляется.
Для встроенного логического оператора ИЛИ результат — true если любой из первого или второго операндов (или оба) — true. Этот оператор является короткозамкнутым: если первый операнд — true, второй операнд не вычисляется.
Обратите внимание, что битовые логические операторы не выполняют короткое замыкание.
Результаты
a |
true |
false |
|---|---|---|
!a |
false |
true |
and |
a |
||
|---|---|---|---|
true |
false |
||
b |
true |
true |
false |
false |
false |
false |
|
or |
a |
||
|---|---|---|---|
true |
false |
||
b |
true |
true |
true |
false |
true |
false |
|
При разрешении перегрузки по отношению к пользовательским операторам, в разрешении перегрузки участвуют следующие встроенные сигнатуры функций:
bool operator!(bool) | ||
bool operator&&(bool, bool) | ||
bool operator||(bool, bool) |
Пример
#include <iostream>
#include <sstream>
#include <string>
int main()
{
int n = 2;
int* p = &n;
// pointers are convertible to bool
if ( p && *p == 2 // "*p" is safe to use after "p &&"
|| !p && n != 2) // || has lower precedence than &&
std::cout << "true\n";
// streams are also convertible to bool
std::stringstream cin;
cin << "3...\n" << "2...\n" << "1...\n" << "quit";
std::cout << "Enter 'quit' to quit.\n";
for (std::string line; std::cout << "> "
&& std::getline(cin, line)
&& line != "quit";)
std::cout << line << '\n';
}Вывод:
true Enter 'quit' to quit. > 3... > 2... > 1... >
Стандартная библиотека
Поскольку свойства короткого замыкания operator&& и operator|| не применяются к перегрузкам, а типы с булевыми семантиками встречаются редко, только два класса стандартной библиотеки перегружают эти операторы:
| применяет унарный арифметический оператор к каждому элементу valarray (публичный член-функция std::valarray<T>) |
|
| применяет бинарные операторы к каждому элементу двух valarray или valarray и значению (шаблон функции) |
|
проверяет наличие ошибки (синоним fail() )(публичный член-функция std::basic_ios<CharT,Traits>) |
См. также
| Общие операторы | ||||||
|---|---|---|---|---|---|---|
| присваивание |
инкремент декремент | арифметические | логический | сравнение |
доступ к членам доступа | другие |
|
|
|
|
|
|
| вызов функции |
a(...) |
||||||
| запятая | ||||||
a, b |
||||||
| условный | ||||||
a ? b : c |
||||||
| Специальные операторы | ||||||
|
|
||||||
| Документация C для Логических операторов |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/language/operator_logical