这里发生什么类型的演员表(在B::get()
)?
class A {
public:
A() : a(0) {}
int a;
};
class B : public A {
public:
A* get() {
return this; //is this C-style cast?
}
};
int main()
{
B b;
cout << b.get()->a << "\n";
system("pause");
return 0;
}
我在一个著名的API中看到过这种代码。这样做更好吗?static_cast<A*>(this);
?
这是标准的派生到基指针转换。规则是指向D
和一些const
/volatile
资格可以转换为指向B
具有相同的限定符,如果B
是一个基类D
.
标准转换是具有内置含义的隐式转换,并且是独立的概念,例如static_cast
或 C 风格的强制转换。
一般来说,如果可以的话,最好依赖隐式转换。显式转换会增加更多代码噪音,并可能隐藏一些维护错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)