将派生类强制转换为基
Cast derived class to base
此处(在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);
是更好的练习吗?
这是一个标准的派生到基指针的转换。规则是,如果B
是D
的基类,则具有某些const
/volatile
限定符的指向D
的指针可以转换为具有相同限定符的B
的指针。
标准转换是具有内置含义的隐式转换,是类似于static_cast
或C样式转换的独立概念。
通常情况下,最好在可能的情况下依赖隐式转换。显式转换增加了更多的代码噪声,并可能隐藏一些维护错误。
它是到祖先的隐式转换。隐式转换通常是安全的,它们不能做static_cast
不能做的事情。实际上,它们更受限制:你可以用static_cast
进行未检查的下转换,但不能用隐式转换。
相关文章:
- 存储模板类型以强制转换回派生<T>
- 在 C++ 中将对象转换为派生类型
- 从基类实例调用派生类方法而不进行强制转换
- 从基指针到派生的强制转换问题
- C++将派生类转换为基类时'object slicing'期间发生的情况
- 派生类(构造函数具有参数)和基类(构造函数缺少参数)之间没有可行的转换
- C ++基础私有方法在将自身转换为派生类后可以访问吗?
- 调用不在基类中的派生类函数而不进行动态强制转换,以最大程度地提高性能
- 在将派生类指针类型转换为派生类指针后,从基类指针调用派生类函数
- 我们可以在不知道其真实类型的情况下将基类指针转换为派生类指针吗?
- 为什么从基转换为派生提供此功能?
- 将基本实例指针强制转换为派生实例指针是否合法?(实例不是派生实例)
- 从从该抽象类派生的 Python 对象强制转换C++抽象类C++
- 基类到派生类的强制转换向量
- 有没有办法复制派生类指针的向量而不将其强制转换为基类?
- 为什么此代码不将基类强制转换为 c++ 中的派生类?
- 如何在运行时将指向派生类的 void* 正确转换为指向基类的 void*
- C++转换派生类
- CRTP / 宏 / 避免强制转换派生类的指针
- 如何正确转换派生类