Операторы сравнения используются для проверки отношения между двумя значениями.
Как и логические операторы, они возвращают значение типа bool.
Вот их список:
==- равно!=- не равно<- меньше>- больше<=- меньше или равно>=- больше или равно
Операторы равенства и неравенства
int a = 5;
int b = 10;
int c = 5;
std::cout << (a == b) << std::endl;
std::cout << (a == c) << std::endl;
0
1
Оператор равно == сравнивает два значения.
В случае если эти значения равны - возвращает true, в ином - false.
Очень легко спутать этот оператор с оператором присвоения =.
int a = 5;
int b = 10;
int c = 5;
std::cout << (a = b) << std::endl;
std::cout << (a = c) << std::endl;
std::cout << a << std::endl;
10
5
5
Результатом оператора присваивания является сам объект после изменения.
В данном случае выражение a = b имеет значение 10 и является lvalue, ссылающимся на переменную a.
lvalue - это выражение, которое обозначает объект, имеющий определённое место в памяти.
Название исторически происходит от "left value" - значения, которое может находиться слева от оператора присваивания.
Если значение a отлично от нуля, то при приведении его к логическому типу результат будет true, в ином случае - false.
То есть это поведение отличается от ожидаемого и возникает в большинстве случаев случайно, из-за невнимательности.
Оператор не-равно != работает по той же самой логике, только инвертированной.
int a = 5;
int b = 10;
int c = 5;
std::cout << (a != b) << std::endl;
std::cout << (a != c) << std::endl;
1
0
То есть можно сказать что он работает как оператор ==, только результат операции инвертируется.
Операторы меньше и больше
Эти операторы уже проверяют в какую сторону идёт различие между значениями.
int a = 5;
int b = 10;
int c = 5;
std::cout << (a > b) << std::endl;
std::cout << (a > c) << std::endl;
std::cout << (a < b) << std::endl;
std::cout << (a < c) << std::endl;
0
0
1
0
Тут все выражения равны false за исключением a < b, потому что фактически 5 < 10.
Оформите подписку, чтобы иметь доступ ко всем публикациям без ограничений. Вы получите мгновенный доступ к полным версиям материалов, исходному коду и новым публикациям сразу после их выхода.
Я регулярно публикую материал и разборы ситуаций для различных игр, движков, а так же подходов разработки включая Internal, External и DMA.