您可以按地址比较对象是否相等?

use*_*216 9 c++

我有一个函数,它按每个属性比较对象,看它们是否相同.但我只是想知道,通过地址比较对象而不是检查它们是否完全相同的对象会更好吗?

Gor*_*pik 19

编辑:注意:如果您希望它正常工作,您不能将值(对象)传递给您的函数.您需要传递(可能是const)引用或指针.

如果你只是想知道引用或指针是指向同一个对象(不是相同的对象,而是相同的对象),那么比较地址是正确的,事实上:

bool AreEqual(const Class& a, const Class& b)
{
  return &a == &b;
}
Run Code Online (Sandbox Code Playgroud)

请注意,上面&Class类可能会超载运算符.从C++ 11开始,函数模板std::addressof可用于处理这个事实:

#include <memory> //std::addressof
bool AreEqual(const Class& a, const Class& b)
{
  return std::addressof(a) == std::addressof(b);
}
Run Code Online (Sandbox Code Playgroud)


Nic*_*tti 16

您应该决定您的课程是否支持等同身份.等价是一种典型的价值属性,例如数字.身份是实体的典型属性,例如人.

等价通常通过比较一个类的数据成员来确定; 比较地址是检查身份的合理方式.

  • @Jon:`NaN` ;-p (3认同)
  • 尽管身份具有同等性,但通常更快地进行测试(通常非常多),并且经常将自身与事物进行比较,因此当您想支持对等时,也值得将身份作为捷径进行测试。 (2认同)
  • 但是,不要将概念与优化混淆 (2认同)