隐式强制转换-使用哪种强制转换
Implicit casting - which cast is used
本文关键字:转换 更新时间:2023-10-16
假设我有一个基类和子类,并有一些多重继承:
class Child : public Base, public AnotherBase
{
};
和函数foo(Base* b)
。我还实例化了一个Child* c
。然后调用foo(c)
。
编译器在这里进行隐式强制类型转换。但它需要c型石膏、static_cast<Base*>
还是其他什么?
static_cast
和c风格强制转换是程序员显式要求类型转换的方式。你的例子是一个标准的隐式转换,它是单独描述的,而不是根据显式转换。
您的示例被称为派生到基的转换,并在[conv.ptr]/2
标准中定义:
N3337:
类型为"指向cvD
"的右值,其中D
是类类型,可以转换为类型为"指向cvB
"的右值,其中B
是D
的基类。如果B
是D
的不可访问或有歧义的基类,则需要进行这种转换的程序是病态的。转换的结果是指向派生类对象的基类子对象的指针。将空指针值转换为目的类型的空指针值。
换句话说,D*
总是隐式转换为具有相同const
和volitile
资格的B*
。
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 复制列表初始化的隐式转换的等级是多少
- 正在将指针转换为范围
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 是否可以从int转换为enum类类型
- 了解 GLM- openGL 中的相机转换
- 将无符号char*转换为std::istream*C++