0Pricing
C++ Academy · Lección

Operador de comparación de tres vías en C++20

Use el operador spaceship para realizar comparaciones concisas y coherentes.

Operador de comparación de tres vías en C++20 es una lección gratuita de C++ Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C++ Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C++ Academy incluye 4 lecciones en total.

El operador spaceship <=>

C++20 introdujo el operador de comparación de tres vías <=>. Un solo operador proporciona al compilador todo lo necesario para generar los seis operadores relacionales.

Tipos de retorno: tres categorías

El tipo de retorno depende de la fuerza de la ordenación:

  • std::strong_ordering — valores equivalentes distinguibles
  • std::weak_ordering — valores equivalentes pero distinguibles, como las cadenas que no distinguen mayúsculas de minúsculas
  • std::partial_ordering — algunos valores son incomparables, como NaN

Comparación predeterminada

El patrón más habitual consiste en pedir al compilador que genere <=> comparando los miembros lexicográficamente.

struct Point {
    int x;
    int y;
    auto operator<=>(const Point& other) const = default;
};

Point a{1, 2}, b{1, 3};
bool less = (a < b);     // true — auto-generated

Los seis automáticamente

Establecer <=> como predeterminado también establece == como predeterminado. Juntos generan !=, <, <=, >, >=: los seis en una sola línea.

Implementación personalizada de &lt;=&gt;

Escriba el cuerpo manualmente para implementar una lógica de comparación personalizada.

std::strong_ordering operator<=>(const Person& other) const {
    if (auto c = name <=> other.name; c != 0) return c;
    return age <=> other.age;
}

Uso del resultado

El resultado de <=> se puede comparar con el literal 0 para realizar la comprobación booleana que necesite.

if ((a <=> b) < 0)  std::cout << "a less\n";
if ((a <=> b) == 0) std::cout << "equal\n";
if ((a <=> b) > 0)  std::cout << "a greater\n";

Punto flotante y partial_ordering

Para valores de coma flotante, use std::partial_ordering para gestionar NaN; comparar con NaN produce unordered.

struct Measurement {
    double value;
    std::partial_ordering operator<=>(const Measurement&) const = default;
};

Ejemplo de ordenación débil

Use la ordenación débil cuando los valores puedan distinguirse, pero se comparen como iguales, por ejemplo, en cadenas que no distinguen mayúsculas de minúsculas.

Personalizar == de forma independiente

Puede establecer <=> como predeterminado y escribir un == personalizado; en ocasiones, la igualdad sigue reglas distintas de las de la ordenación.

Migración de código antiguo

Si su clase tenía anteriormente varios operadores de comparación, sustitúyalos por un <=> predeterminado al migrar a C++20. Mucho menos código con la misma semántica.

Cuándo no usar &lt;=&gt;

Para los tipos en los que solo importa la igualdad, no el orden, proporcione únicamente operator== y operator!=, que se genera automáticamente en C++20.

Nota sobre el rendimiento

El compilador puede optimizar <=> predeterminado con la misma eficiencia que las comparaciones escritas manualmente. Usar el operador spaceship no añade sobrecoste en tiempo de ejecución.

Comprobación rápida

¿Qué categoría de retorno debería usar una comparación para tipos de coma flotante que puedan contener NaN?

Resumen

El operador <=> de C++20 genera los seis operadores relacionales a partir de una sola definición. Establézcalo como predeterminado para comparar los miembros lexicográficamente. Elija una ordenación fuerte, débil o parcial según la semántica de su tipo.

Preguntas frecuentes

¿La lección «Operador de comparación de tres vías en C++20» es gratis?

Sí — el texto completo de «Operador de comparación de tres vías en C++20» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C++ Academy, actualiza a CoddyKit PRO. El curso de C++ Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Operador de comparación de tres vías en C++20»?

Use el operador spaceship para realizar comparaciones concisas y coherentes. Practicas C++ Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar C++ Academy?

No se requiere experiencia previa. C++ Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Operador de comparación de tres vías en C++20»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de C++ Academy?

Sí. Cada lección de C++ Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Operadores aritméticos y de comparación
  2. Operadores de inserción y extracción de streams
  3. Operadores de subíndice y llamada a función
  4. Operador de comparación de tres vías en C++20
← Volver a C++ Academy