Операторы сравнения используются для проверки отношения между двумя значениями.

Как и логические операторы, они возвращают значение типа 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.

Эта публикация содержит только часть статьи.

Полные уроки по C++, реверс-инжинирингу и разработке софта вы можете найти тут: