Devo usar operações memcmp ou encadeadas iguais a ambas quando ambas derem o mesmo resultado?
Condição prévia: Considere essa classe ou estruturaT
, que para dois objetosa
eb
do tipoT
memcmp(&a, &b, sizeof(T)) == 0
produz o mesmo resultado que
a.member1 == b.member1 && a.member2 == b.member2 && ...
(memberN
é uma variável de membro não estático deT
)
Pergunta, questão: Quando deveriamemcmp
ser usado para comparara
eb
pela igualdade, e quando o encadeado==
s ser usado?
Aqui está um exemplo simples:
struct vector
{
int x, y;
};
Para sobrecarregar o operador==
paravector
, existem duas possibilidades (se elas garantem o mesmo resultado):
bool operator==(vector lhs, vector rhs)
{ return lhs.x == rhs.x && lhs.y == rhs.y; }
ou
bool operator==(vector lhs, vector rhs)
{ return memcmp(&lhs, &rhs, sizeof(vector)) == 0; }
Agora, se um novo membro fosse adicionado aovector
, por exemplo, umz
componente:
==
s foram usados para implementaroperator==
, teria que ser modificado.E sememcmp
foi usado em vez disso,operator==
não precisaria ser modificado.Mas acho que usando encadeado==
s transmite um significado mais claro. Embora por um longoT
com muitos membrosmemcmp
é mais tentador. Além disso, há uma melhoria de desempenho ao usarmemcmp
sobre==
s? Mais alguma coisa a considerar?