C++20: Comparação Ternária

por Fabio A. Mazzarino

Uma novidade muito simples e interessante no C++20 é a comparação ternária. Quem programa linguagem C já conhecia há muito tipo este tipo de comparação, mas em outro contexto de comparação. A novidade facilita muito em determinadas situações.

Comparação de Strings

Na linguagem C a comparação de strings é feita através das funções strcmp e strncmp. Ambas as funções comparam duas strings, sem ou com limite de tamanho respectivamente, e retornam 0 caso ambas sejam iguais, 1 caso a primeira string for maior que a segunda e -1 caso a segunda string form maior que a primeira. Pode ser utilizada mais ou menos assim:

#include <string.h>
int main() {
    char s1[] = "Lab C++";
    char s2[] = "Doses Diarias";
    if (strcmp(s1, s2)) 
        printf("Strings diferentes\n");
}

Comparação Ternária

O novo operador é representado por <=>, e ao invés de retornar um valor booleano retorna um inteiro, tal qual strcmp e strncmp, com as mesmas regras, porém para os tipos básicos, além de estar disponível para sobrecarga de operador. Nada melhor pra ilustrar o uso que um exemplo:

#include <iostream>
#include <string>

int main() {
    int a = 5;
    int b = 10;
    auto cmpi = a <=> b;
    if (cmpi > 0)
        std::cout << a << " maior que " << b << std::endl;
    else if (cmpi < 0)
        std::cout << a << " menor que " << b << std::endl;
    else
        std::cout << a << " igual a " << b << std::endl;
}

Note que é comum as bibliotecas padrão de C++ ainda não terem implementado a sobrecarga deste operador em determinados compiladores ou sistemas operacionais. Portante utilize com cautela.

Profissionalmente

Se o time já estiver utilizando C++20, utilize à vontade com os tipos padrões e através de sobrecarga de operador. Cuidado somente com o uso em bibliotecas padrão, certifique-se que todos os compiladores e as plataformas suportam o operador, ou podem surgir problemas.