如何在网站后台删除栏目,可以看的网站的浏览器有哪些,保定网站建设平台分析,wordpress获取微信用户信息今天谈谈类型转换的问题吧#xff0c;之前我们也遇到过类型转换#xff0c;比如c语言中这样的赋值#xff1a; 显然#xff0c;i和j是不同类型的变量#xff0c;但是却可以完成赋值#xff0c;结果是这样的#xff1a; 其实它们是做了隐式的类型转换#xff0c;相当于之前我们也遇到过类型转换比如c语言中这样的赋值 显然i和j是不同类型的变量但是却可以完成赋值结果是这样的 其实它们是做了隐式的类型转换相当于double j doublei所以成功的赋值。
还有另外一种 结果是 像这样的属于显示的类型转换。
这样类似的还有很多。下面我介绍c中几种特殊的类型转换
1、static_cast
static_cast用于相关类型的转换如intdouble属于静态转换。 比如 结果 2、reinterpret_castreinterpret重新解释的意思哈
reinterpret_cast用于不相关类型的转换。
比如例子1 例子2 结果 像第二种这样的例子是对于函数而言C不保证所有的函数指针都被一样的使用所以这样用有时会产生不 确定的结果。所以不建议这样使用。
3、const_cast
const_cast是用于去掉常属性的方便赋值。
比如 4、dynamic_cast
dynamic_cast用于将一个父类对象的指针或引用转换为一个子类对象的指针或引用。 在这里使用dynamic_cast需要A类为多态类型。
dynamic_cast还有一个特点
就在上述的代码中输出papb可以看出 · dynamic_cast会先检查是否能转换成功能成功则转换不能则返回0
如果换做static_cast就不会检查 这也是dynamic_cast更安全的地方。
以上就是四种强制类型转换方式。 下面说一个关键字explicit阻止隐式调用构造函数 在这里隐式调用了我们的构造函数是因为这里的1比较特殊所以可以调用成功但是这种写法本身是不对的。如果换做其他的或许就不行了。为了避免这样的书写我们会在A函数前加上关键字explicit。像这样 这下就编译不过了提高了代码安全性。