C++ *在C++;

C++ *在C++;,c++,this,C++,This,我理解这个做什么,但是*这个和这个之间有什么区别 是的,我已经在我的课本上搜索并阅读了*这个,但我就是不明白它…这个是一个指针,*这个是一个未引用的指针 如果您有一个返回this的函数,它将是指向当前对象的指针,而返回*this的函数将是当前对象的“克隆”,在堆栈上分配,除非您指定了返回引用的方法的返回类型 一个简单的程序,显示对副本和引用进行操作的区别: #include <iostream> class Foo { public: Foo()

我理解
这个
做什么,但是
*这个
这个
之间有什么区别


是的,我已经在我的课本上搜索并阅读了
*这个
,但我就是不明白它…

这个
是一个指针,
*这个
是一个未引用的指针

如果您有一个返回
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;
}

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

这是指向类实例的指针<代码>*此
是对相同代码的引用。它们是不同的,正如
int*i_ptr
int&i_ref
是不同的。

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

我在这里验证:返回*这不返回对象的引用,而是对象的副本?你可以这样问*这实际上返回了对对象的引用。例如,如果在类中重载[]运算符,则可以在类内部使用(*this)[]而不是运算符[]。请注意,您的示例具有误导性。尝试Foo&get_copy(){return*this;}。然后您会看到,实际上*这是一个引用。@ypnos:*这是一个取消引用的指针或引用与此无关
Foo&get_copy(){return*this;}
将返回一个引用,因为您告诉它(通过声明Foo&)。与任何其他类型一样,
Foo get_copy(){return*this;}
将返回对象的副本。更准确地说,指针的取消引用将导致引用该对象的左值。因为它是一个左值,所以您可以将其分配给一个引用变量并获取对它的引用;或者您可以将其分配给对象类型的变量并获取副本,或者您可以对其执行
&
操作以再次获取指针。啊,是的,我想我应该先将其扔到编译器中进行验证:)
1
1
2
3