1个回答
展开全部
“强制类型转换”……是说显式类型转换吧……
形式上包括C风格转换、static_cast、reinterpret_cast、const_cast和dynamic_cast。C风格转换形如(T)e,把表达式e转换为T类型,语义上可以是static_cast、const_cast、reinterpret或是它们的组合。static_cast是编译期的类型转换,用于有整数/浮点数之间的转换以及有继承关系的类的转换;reinterpret_cast比较暴力,static_cast转换不了的指针和整数之类的转换都可以进行,当然sizeof不等的类型没办法转换(比C语言的C风格转换更直接,不会进行内存布局对齐),因此也比较不安全;dynamic_cast是运行期查询多态类(具有虚函数/虚继承)的继承关系的转换,如果失败,对于指针结果为零,对于引用抛出std::bad_cast异常。
类的单个参数自定义的构造函数可以用于代替其中的static_cast但不能代替其它类型转换。
例如
class A
{
public;
A(int);
};
那么表达式A(1)和static_cast<A>(1)、(A)1都调用构造函数A(1)生成临时变量。
形式上包括C风格转换、static_cast、reinterpret_cast、const_cast和dynamic_cast。C风格转换形如(T)e,把表达式e转换为T类型,语义上可以是static_cast、const_cast、reinterpret或是它们的组合。static_cast是编译期的类型转换,用于有整数/浮点数之间的转换以及有继承关系的类的转换;reinterpret_cast比较暴力,static_cast转换不了的指针和整数之类的转换都可以进行,当然sizeof不等的类型没办法转换(比C语言的C风格转换更直接,不会进行内存布局对齐),因此也比较不安全;dynamic_cast是运行期查询多态类(具有虚函数/虚继承)的继承关系的转换,如果失败,对于指针结果为零,对于引用抛出std::bad_cast异常。
类的单个参数自定义的构造函数可以用于代替其中的static_cast但不能代替其它类型转换。
例如
class A
{
public;
A(int);
};
那么表达式A(1)和static_cast<A>(1)、(A)1都调用构造函数A(1)生成临时变量。
参考资料: 原创
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询