*这与C ++相比

时间:2010-05-01 14:36:07

标签: c++ this

我了解this的作用,但*thisthis之间的区别是什么?

是的,我在Google教科书中使用Google搜索并阅读了*this,但我只是不明白......

3 个答案:

答案 0 :(得分:56)

this是一个指针,*this是一个解除引用的指针。

如果你有一个返回this的函数,它将是一个指向当前对象的指针,而返回*this的函数将是当前对象的“克隆”,在stack - 除非指定了返回引用的方法的返回类型。

一个简单的程序,显示了对副本和引用进行操作之间的区别:

#include <iostream>

class Foo
{
    public:
        Foo()
        {
            this->value = 0;
        }

        Foo get_copy()
        {
            return *this;
        }

        Foo& get_copy_as_reference()
        {
            return *this;
        }

        Foo* get_pointer()
        {
            return this;
        }

        void increment()
        {
            this->value++;
        }

        void print_value()
        {
            std::cout << this->value << std::endl;
        }

    private:
        int value;
};

int main()
{
    Foo foo;
    foo.increment();
    foo.print_value();

    foo.get_copy().increment();
    foo.print_value();

    foo.get_copy_as_reference().increment();
    foo.print_value();

    foo.get_pointer()->increment();
    foo.print_value();

    return 0;
}

输出:

1
1
2
3

您可以看到,当我们对本地对象的副本进行操作时,更改不会持久存在(因为它完全是一个不同的对象),而是在引用或指针上运行 会保留更改。

答案 1 :(得分:10)

this是指向类实例的指针。 *this引用。它们的不同之处在于int* i_ptrint& i_ref不同。

答案 2 :(得分:-4)

没有真正的区别,this->foo()(*this).foo()相同。