*这与C++相比

33 c++ this

我明白了什么this,但*this和之间的区别是this什么?

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

Mar*_*off 60

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;
}
Run Code Online (Sandbox Code Playgroud)

输出:

1
1
2
3
Run Code Online (Sandbox Code Playgroud)

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

  • 马克,你的例子是误导.试试Foo&get_copy(){return*this; }.然后你会看到其实*这是一个参考. (5认同)
  • @ypnos:*这是一个取消引用的指针或引用与此无关。`Foo &amp; get_copy() { 返回 *this; }` 将返回一个引用,因为您告诉它(通过声明 Foo &amp;)。和 `Foo get_copy() { return *this; }` 将返回对象的副本,与任何其他类型一样。 (2认同)
  • 更准确地说,指针的取消引用会产生引用该对象的*左值*。由于它是左值,因此可以将其分配给引用变量并获取对它的引用;或者您可以将其分配给对象类型的变量并获取副本,或者您可以对其执行“&amp;”以再次获取指针。 (2认同)

Mar*_*tos 10

this是指向类实例的指针.*this是对同一个的引用.他们以同样的方式不同int* i_ptrint& i_ref不同.