c++:实现相等方法——如何确保给定对象与此引用不同?

标签 c++

考虑以下代码片段:

bool SomeObject::equal(const SomeObject& rhs) const
{
  if (this == &rhs)
  {
    return true;
  }

  // check the state
}

此代码的问题是 SomeObject 可能会覆盖 operator&(或者将来有人可能会添加它),这反过来可能会破坏此实现。

是否可以测试 rhs*this 是否是同一个对象而不受 operator& 实现的支配?

最佳答案

如果您想获取对象的实际地址并忽略重载的 & 运算符,请使用 std::addressof

bool SomeObject::equal(const SomeObject& rhs) const
{
  if (this == std::addressof(rhs))
  {
    return true;
  }

  // check the state
}

引用:http://en.cppreference.com/w/cpp/memory/addressof

关于c++:实现相等方法——如何确保给定对象与此引用不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8821936/

相关文章:

c++ - 是否在 Exit() 时调用基本对象析构函数?

c++ - 通过组合实现仿函数重载

c++ - 不能在 C++ 中使用宏定义类

c++ - 如何连接二维数据数组

c++ - 将字符串元素添加到动态数组

c++ - OpenCV 泛化 vector 积以返回任意大小的矩阵

c++ - 使用 giflib 解码 gif 时出错

c++ - 什么是std::mutex阻止线程修改?

c++ - 如何有效地用不同的整数元素替换 char 字符串的元素?

c++ - 是否有任何不是用 Java 编写的 Serious Graph 数据库?