什么是" operator->()"在C ++中?

时间:2013-06-08 13:35:54

标签: c++ operator-overloading

我遇到了一个类似于operator->()被调用的C ++代码。以下是代码段,如果有人请解释一下。

template <typename T>
bool List<T>::operator == (const List& rhs)const
{
  return (this == &rhs) || (root_.operator->() == rhs.root_.operator->());
}

请注意,root_是另一个类的对象,其中没有完整代码。

编辑:我刚刚探索了代码,发现root_实际上是智能指针的自定义实现。它有运营商 - &gt;重载它以取消引用智能指针并获得实际指针的值。

4 个答案:

答案 0 :(得分:11)

如果您有对象,则可以通过object.attr访问其属性。当你有一个指针时,你可以使用->运算符来访问它所指向的对象的属性ptr->attr

到目前为止,这是C中的默认行为。但是,->运算符可以重载 - 即,像任何函数一样被覆盖。您可以为类定义自己的行为,以便object->表示您想要的任何内容。但是,我不相信在这种情况下,运营商过载了。奇怪的语法是因为你不能这样做:

if lhs-> == rhs->

由于->运算符必须后跟某些内容。所以这样做的方法是为这个函数使用显式的无糖名称,即operator->,并将其称为函数(因此为括号)。

所以:

return (this == &rhs) || (root_.operator->() == rhs.root_.operator->());

此行的含义是“如果我的对象等于左侧的对象,如果我们的_root属性指向彼此相等的对象,则返回true。”。

答案 1 :(得分:4)

您所询问的内容称为结构解除引用运算符T::operator ->();它来自,而可能会重载。< / p>

它通过指针选择一个元素,并按照它在示例中使用的方式使用它只返回实例的地址(root_)。

然后该地址用于比较实例的身份(地址是否匹配?)

答案 2 :(得分:0)

这是该类->运算符的重载调用。

答案 3 :(得分:0)

通常operator-&gt;()返回一个指针,所以这段代码只是比较两个指针。我认为这是一个链表实现,operator ==比较指向整个列表的指针和指向head(root)元素的指针