Operadores relacionales: <, >, <= y >=

Sintaxis

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

Comentarios

Los operadores relacionales binarios determinan las relaciones siguientes:

  • Menor que (<)

  • Mayor que (>)

  • Menor o igual que (<=)

  • Mayor o igual que (>=)

Los operadores relacionales tienen asociatividad de izquierda a derecha. Ambos operandos de los operadores relacionales deben ser de tipo aritmética o puntero. Producen valores de tipo bool. El valor devuelto es false (0) si la relación de la expresión es falsa; si no, el valor devuelto es true (1).

Ejemplo

// 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;
}

Las expresiones del ejemplo anterior se deben incluir entre paréntesis porque el operador de inserción de la secuencia (<<) tiene mayor prioridad que los operadores relacionales. Por consiguiente, la primera expresión sin paréntesis se evaluaría como:

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

Las conversiones aritméticas habituales tratadas en Conversiones estándar se aplican a los operandos de tipos aritméticos.

Comparar punteros

Cuando se comparan dos punteros a objetos del mismo tipo, el resultado está determinado por la ubicación de los objetos a los que se señala en el espacio de direcciones del programa. Los punteros también se pueden comparar con una expresión de constante que se evalúa como 0 o con un puntero de tipo void *. Si una comparación de puntero se realiza frente a un puntero de tipo void *, el otro puntero se convierte implícitamente al tipo void *. A continuación, se realiza la comparación.

Dos punteros de tipos diferentes no pueden compararse a menos que:

  • Un tipo sea un tipo de clase derivado del otro tipo.

  • Al menos uno de los punteros se convierta explícitamente (conversión) al tipo void *. (El otro puntero se convierte implícitamente al tipo void * para la conversión).

Se garantiza que dos punteros del mismo tipo que señalan al mismo objeto realizan una comparación igual. Si se comparan dos punteros a miembros no estáticos de un objeto, se aplican las reglas siguientes:

  • Si el tipo de clase no es una union y si los dos miembros no se separan mediante un access-specifier ( especificador de acceso), como public, protected o private, el puntero al miembro declarado en último lugar realizará una comparación mayor que el puntero al miembro declarado anteriormente.

  • Si los dos miembros están separados por un access-specifier, los resultados son indefinidos.

  • Si el tipo de clase es una union, los punteros a miembros de datos diferentes en esa union realizan una comparación igual.

Si dos punteros señalan a elementos de la misma matriz o al elemento uno situado más allá del final de la matriz, el puntero al objeto con el subíndice más alto realiza una comparación superior. Se garantiza que la comparación de punteros es válida solo cuando los punteros hacen referencia a objetos de la misma matriz o a la ubicación uno superado el final de la matriz.

Consulte también

Expresiones con operadores binarios
Operadores integrados de C++, precedencia y asociatividad
Operadores relacionales y de igualdad de C