重载箭头运算符

2019年4月23日 0 条评论 163 次阅读 0 人点赞

在学习STL源码的时候, 看到了迭代器对于->运算符的重载, 有点迷惑, 在网上查了些资料

->是一个一元运算符, 必须返回一个指针或者定义了->的对象

如果返回的指针, 那么a->x相当于调用operator->()->x, 如果是对象, 则为operator->()->x

struct A
{
    int i;
    double d;
};
struct B
{
    A* a;
    A& operator* () { return *a; }
    A* operator->() { return &(operator*()); }
};

int main()
{
    ltx::__rb_tree_base_iterator ite;
    A a;
    a.i = 10;
    a.d = 1.234;
    B b;
    b.a = &a;
    cout << (*b).d << endl;
    cout << b->d << endl;

    return 0;
}

litmxs

这个人太懒什么东西都没留下

文章评论(0)