超载-> c++ 中的运算符

发布于 2024-09-03 01:21:16 字数 189 浏览 7 评论 0原文

我看到了这段代码,但我无法理解它的作用:

inline S* O::operator->() const
{
    return ses; //ses is a private member of Type S*
}

那么如果我使用 -> 现在会发生什么?

I saw this code but I couldn't understand what it does:

inline S* O::operator->() const
{
    return ses; //ses is a private member of Type S*
}

so what happens now if I used ->?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

变身佩奇 2024-09-10 01:21:16

现在,如果您

O object;
object->whatever()

首先调用重载的 operator-> ,它将返回存储在对象内的 ses ,然后 operator-> (在 S* 的情况下是内置的)将再次调用返回的指针。

So

object->whatever();

相当于伪代码:

object.ses->whatever();

后者当然是不可能的,因为 O::sesprivate - 这就是为什么我称其为伪代码

通过这样的重载,您可以围绕指针创建一个包装器 - 这种包装器通常称为智能指针

Now if you have

O object;
object->whatever()

first the overloaded operator-> will be called, which will return ses stored inside the object, then operator-> (built-in in case of S*) will be called again for the returned pointer.

So

object->whatever();

is equivalent to pseudocode:

object.ses->whatever();

the latter would be of course impossible since O::ses is private - that's why I call it pseudocode.

With such overload you can create a wrapper around a pointer - such wrapper is typically called smart pointer.

樱花落人离去 2024-09-10 01:21:16

如果你有一个类 O 的实例,

obj->func()

那么你就执行操作符->返回 ses,然后使用返回的指针调用 func()。

完整示例:

struct S
{
    void func() {}
};

class O
{
public:
    inline S* operator->() const;
private:
    S* ses;
};

inline S* O::operator->() const
{
    return ses;
}

int main()
{
    O object;
    object->func();
    return 0;
}

Is you have an instance of class O and you do

obj->func()

then the operator-> returns ses and then it uses the returned pointer to call func().

Full example:

struct S
{
    void func() {}
};

class O
{
public:
    inline S* operator->() const;
private:
    S* ses;
};

inline S* O::operator->() const
{
    return ses;
}

int main()
{
    O object;
    object->func();
    return 0;
}
千仐 2024-09-10 01:21:16

它是一个重载运算符,将返回指向 S 类型的某个成员的指针。

就像,如果您编写

O object;
(object->)...

(object->) 部分将成为您的指针。

It's an overloaded operator that would return a pointer to some member of type S.

Like, if you write

O object;
(object->)...

the part (object->) would become your pointer.

世界等同你 2024-09-10 01:21:16

任何时候 O 类型的对象使用 ->;运算符将返回指向 ses 的指针。

Anytime an object of type O uses the -> operator a pointer to ses will be returned.

荒路情人 2024-09-10 01:21:16

它使运算符重载 ->属于 O 类,现在返回 S* 而不是 O*

It overloads the operator -> of the class O, that returns now an S* instead of an O*

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文