在这里进行什么类型的演员表演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(this);
吗?
这是标准的派生到基指针转换.规则是指向D
某些const
/ volatile
资格的指针可以转换为指向B
具有相同限定符的指针(如果B
是基类)D
.
标准转换是具有内置含义的隐式转换,并且与诸如static_cast
C风格的转换之类的事物是分开的概念.
通常情况下,最好尽可能依赖隐式转换.显式转换会增加更多代码噪音,并可能隐藏一些维护错误.