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:

E se==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?

questionAnswers(6)

yourAnswerToTheQuestion