Реляционные операторы: <, >, <=и >=

Синтаксис

expression < expression
expression > expression
expression <= expression
expression >= expression

Замечания

Бинарные операторы отношения определяют следующие отношения:

  • Меньше (<)

  • Знак "больше" (>)

  • Меньше или равно (<=)

  • Больше или равно (>=)

Операторы отношения обладают ассоциативностью слева направо. Оба операнда операторов отношения должны быть арифметического типа или типа указателя. Они дают значения типа bool. Возвращаемое значение равно false (0), если связь в выражении имеет значение false; в противном случае возвращаемое значение равно true (1).

Пример

// expre_Relational_Operators.cpp
// compile with: /EHsc
#include <iostream>

using namespace std;

int main() {
   cout  << "The true expression 3 > 2 yields: "
         << (3 > 2) << endl
         << "The false expression 20 < 10 yields: "
         << (20 < 10) << endl;
}

Выражения в предыдущем примере должны быть заключены в скобки, так как оператор вставки потока (<<) имеет более высокий приоритет, чем реляционные операторы. Поэтому первое выражение без скобок вычислялось бы следующим образом:

(cout << "The true expression 3 > 2 yields: " << 3) < (2 << "\n");

Обычные арифметические преобразования, описанные в стандартных преобразованиях , применяются к операндам арифметических типов.

Сравнение указателей

При сравнении двух указателей на объекты одного типа результат определяется расположением объектов, указываемых в адресном пространстве программы. Указатели также можно сравнить с константным выражением, которое оценивается как 0, так и с указателем типа void *. Если сравнение указателя выполняется с указателем типа void *, другой указатель неявно преобразуется в тип void *. Затем выполняется сравнение.

Два указателя разных типов можно сравнивать, только если выполняются следующие условия.

  • Один тип является типом класса, производным от другого типа.

  • По крайней мере один из указателей явно преобразуется (приведение) в тип void *. (Другой указатель неявно преобразуется в тип void * для преобразования.)

Гарантируется, что два указателя одного типа, указывающие на один и тот же объект, равны. Если сравнивается два указателя на нестатические члены объекта, применяются следующие правила.

  • Если тип класса не unionявляется типом , и если два члена не разделены описателем доступа, например public, protectedили private, указатель на элемент, объявленный последним, будет сравнивать больше указателя на элемент, объявленный ранее.

  • Если два члена разделены описательом доступа, результаты не определены.

  • Если тип класса является типом union, указатель на разные члены данных в том же сравнении union .

Если два указателя указывают на элементы одного массива или на элемент, находящийся за пределами массива, большим является указатель на объект с более высоким нижним индексом. Сравнение указателей гарантированно является допустимым, только если указатели ссылаются на объекты в одном массиве или на расположение объекта после конца массива.

См. также

Выражения с бинарными операторами
Операторы C++, приоритет и ассоциативность
Операторы отношения и равенства C