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

questionAnswers(2)

yourAnswerToTheQuestion