我有这个代码:
#include <iostream>
using namespace std;
struct A;
struct B;
void g(A* a){ cout << "A";}
void g(B* b){ cout << "B";}
struct A{
A(){ g(this); }
};
struct B : A{
B(){}
};
int main() {
B* b=new B();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
其中输出是:
一个
这是否意味着this传递给构造函数的指针A()类型是A*什么类型?
Hay*_*ayt 12
是.
东西是一个B对象也是一个A对象.虽然你A在类的功能里面不知道它是否是一个B.所以this-ptr将是类型A*.
当你调用函数内部B它B*.
正如工作草案[9.2.2.1/1]中提到的那样(这个指针):
的类型的 这一 类中的X的成员函数是X*.
注意构造函数是一个特殊的成员函数,并且A是一个子对象B,因此this成员函数体内的指针A是类型的A*,而它是B*成员函数中的类型B.
还要注意thisfrom A和thisfrom B也可以有不同的值,即它们可以指向不同的子对象.
举个例子:
#include<iostream>
struct A {
A() { std::cout << this << std::endl; }
int i{0};
};
struct B: A {
B() { std::cout << this << std::endl; }
virtual void f() {}
};
int main() {
B b;
}
Run Code Online (Sandbox Code Playgroud)
那说:
这是否意味着 传递给构造函数的 this指针
A()的类型是A什么类型 ?
不,不是.这是类型A*.
编辑
尽管OP编辑了这个问题并改变了它的含义,但我宁愿在这个答案中留下原始问题的引用.
回滚对于该编辑可能是适当的操作.
无论如何,答案仍然适用.