[英]'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.