Подтвердить что ты не робот

* это против этого в С++

Я понимаю, что делает this, но в чем разница между *this и this?

Да, у меня есть Googled и читать *this в моем учебнике, но я просто не понимаю...

4b9b3361

Ответ 1

this является указателем, а *this является разыменованным указателем.

Если у вас есть функция, которая вернула this, это будет указатель на текущий объект, а функция, которая вернула *this, будет "клонировать" текущего объекта, выделенного в стеке, - если только вы указали возвращаемый тип метода для возврата ссылки.

Простая программа, которая показывает разницу между операциями с копиями и ссылками:

#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

Вы можете видеть, что, когда мы работаем с копией нашего локального объекта, изменения не сохраняются (потому что это совсем другой объект целиком), но работа над ссылкой или указателем сохраняет текущие изменения.

Ответ 2

this является указателем на экземпляр класса. *this - это ссылка на то же самое. Они отличаются друг от друга так, что int* i_ptr и int& i_ref отличаются.

Ответ 3

Нет реальной разницы, this->foo() совпадает с (*this).foo().