我遇到了一个类似于operator->()被调用的C ++代码。以下是代码段,如果有人请解释一下。
template <typename T>
bool List<T>::operator == (const List& rhs)const
{
return (this == &rhs) || (root_.operator->() == rhs.root_.operator->());
}
请注意,root_是另一个类的对象,其中没有完整代码。
编辑:我刚刚探索了代码,发现root_实际上是智能指针的自定义实现。它有运营商 - &gt;重载它以取消引用智能指针并获得实际指针的值。
答案 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 ->();
它来自c,而c++可能会重载。< / p>
它通过指针选择一个元素,并按照它在示例中使用的方式使用它只返回实例的地址(root_
)。
然后该地址用于比较实例的身份(地址是否匹配?)
答案 2 :(得分:0)
这是该类->
运算符的重载调用。
答案 3 :(得分:0)
通常operator-&gt;()返回一个指针,所以这段代码只是比较两个指针。我认为这是一个链表实现,operator ==比较指向整个列表的指针和指向head(root)元素的指针