03.08
2023
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.