强制类型转换

1 static_cast<typename>(value); 更加严格的强制类型转换

2 关于类的强制类型转换 本质上是隐式调用了构造函数 且只有//接受一个参数(可以提供默认值)//的构造函数才能作为转换函数

Stonewt(double lbs)

stonewt mycat

mycat=19.6(隐式) =Stonewt(19.6) 显式

其中 可以用explicit Stonewt(double labs)来关闭隐式转换

mycat=19会自动的将19转化为double

但 当且仅当转换不存在二义性时 才会进行这种转换

比如 若还有构造函数Stonewt(long)

编译器会拒绝这些语句 因为调用存在二义性

3 那怎么将类转换成其他类型呢?

要进行相反的转换,必须使用特殊的c++运算符函数 转换函数

Stonewt wall(20,3)

double star=wall

编译器会寻找是否有匹配的转换函数 若没有找到则会报错 

operator typename()    1.转换函数必须是类方法       2转换函数不能指定返回类型     3.转换函数不能有参数

注意二义性 可以先将类转化为int(double)再赋给long  同理 转换函数于c++11中 也可以用explicit来关闭隐式转换x

 

posted @ 2021-06-18 21:12  旅玖旅玖  阅读(43)  评论(0编辑  收藏  举报