繁体   English   中英

C++ 中的“this”是指向引用的指针?

[英]'this' in C++ is a pointer to a reference?

我知道这是愚蠢的,标题可能是没有答案的。我一直认为this是一个指针,它在每一个方法调用由对象提供的当前对象(这是不是一个静态方法)

但看看我的代码实际返回的内容,例如:

Test& Test::func () 
{ 
   // Some processing 
   return *this; 
} 

的解引用this返回...并返回类型为对象的参考....那么,是什么使this 有什么我不太理解的事情吗?

请记住,引用只是对象的不同名称

这意味着返回引用与返回抽象类型级别的对象是一回事。 结果不是一回事:返回一个引用意味着调用者获得对当前对象的引用,而返回一个对象会给他(对)当前对象的一个副本——所有的后果,就像副本一样正在调用构造函数,正在做出深复制决策等。

cppreference

关键字 this 是一个纯右值表达式,其值为正在调用成员函数的对象的地址。

然后(也许更容易掌握):

类 X 的成员函数中 this 的类型是 X*(指向 X 的指针)。 如果成员函数是 cv 限定的,则 this 的类型是 cv X*(指向相同 cv 限定的 X 的指针)。 由于构造函数和析构函数不能是 cv 限定的,因此它们中的 this 类型始终为 X*,即使在构造或销毁 const 对象时也是如此。

所以, this不是一个指向引用的指针,而只是一个指针。

实际上,您不能拥有指向引用的指针,因为获取引用的地址将为您提供被引用对象的地址。

此外,C++ 中没有特殊的语法来形成引用。 相反,必须在初始化时绑定引用,例如:

int x = 3;
int& y = x;   // x is int, but y is int&
assert( &y == &x); // address of y is the address of x

从函数返回引用时类似:

int& get_x() {
    static int x = 3;
    return x;
}

简而言之:

test t1;  //  t1 is a test object.

test& t2 = t1; //  t2 is another name for t1.

test* t3; //  t3 holds an address of a test object.

*t3; //  derefernce t. which gives you, the test object that t3 points to.

this是一个指向当前测试对象的指针。
因此*this是当前的测试对象,并且因为返回值类型是test& ,所以当您调用该函数时,您将获得调用该函数的相同对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM