我有两个关于C++的问题:关键词“this”的实际含义是什么?
在很多教科书中,关键字this
是一个指向调用对象。正确?
正如我想用编码玩,我写了下面简单的代码:
struct Base
{
void g();
virtual void f();
};
void Base::f() {
cout << "Base::f()" << endl;
}
void Base::g() {
cout << "Base::g()" << endl;
cout << "sizeof(*this) : " << sizeof(*this) << endl;
this->f();
}
struct Derived : public Base
{
int d;
void f();
};
void Derived::f()
{
cout << "Derived::f()" << endl;
}
int main()
{
Base a;
Derived b;
cout << "sizeof(a) : " << sizeof(a) << endl;
cout << "sizeof(b) : " << sizeof(b) << endl;
a.g();
b.g();
}
上面的代码产生以下输出:
sizeof(a) : 4
sizeof(b) : 8
Base::g()
sizeof(*this) : 4
Base::f()
Base::g()
sizeof(*this) : 4 // why 4 bytes not 8 bytes?????????
Derived::f()
如果this
指向调用对象,如果sizeof(*this)
的第二行打印8而不是4,因为调用对象是b
?究竟发生了什么? this
已被降级?!!!!
如果this
已被降级为Base
,this->f()
如何调用正确的函数?我很困惑。
尝试添加调用为sizeof(*此)的衍生:: F()。看看发布了什么。 Base :: g()中的调用不知道它是子类的一部分。在这种情况下,*这个合法地引用Base,而不是Derived。 –
以及你如何期望'sizeof(* this)'在编译时被评估?它与'sizeof(Base)'没有区别。 –