Como os operadores <e> trabalham com ponteiros?
Só por diversão, eu tive umstd::list
doconst char*
, cada elemento apontando para uma sequência de texto terminada em nulo e executou umstd::list::sort()
nele. Por acaso, meio que (sem trocadilhos) não classificou as strings. Considerando que estava trabalhando em indicadores, isso faz sentido.
De acordo comdocumentação dostd::list::sort()
, (por padrão) usa ooperator <
entre os elementos para comparar.
Esquecendo a lista por um momento, minha pergunta real é: como esses operadores (>, <,> =, <=) trabalham com ponteiros em C ++ e C? Eles simplesmente comparam os endereços de memória reais?
char* p1 = (char*) 0xDAB0BC47;
char* p2 = (char*) 0xBABEC475;
por exemplo. em um sistema little-endian de 32 bits,p1
> p2
Porque0xDAB0BC47
> 0xBABEC475
?
O teste parece confirmar isso, mas achei que seria bom colocá-lo no StackOverflow para referência futura. C e C ++ fazem algunscoisas estranhas para ponteiros, para que você nunca saiba realmente ...