详解强制类型转换

今天谈谈类型转换的问题吧,之前我们也遇到过类型转换,比如c语言中这样的赋值:


显然,i和j是不同类型的变量,但是却可以完成赋值,结果是这样的:


其实它们是做了隐式的类型转换,相当于:double j = (double)i;所以成功的赋值。

还有另外一种:


结果是:


像这样的,属于显示的类型转换。

这样类似的还有很多。下面我介绍c++中几种特殊的类型转换:

1、static_cast

static_cast用于相关类型的转换(如int,double),属于静态转换。

     比如:


结果:


2、reinterpret_cast(reinterpret:重新解释的意思哈)

reinterpret_cast用于不相关类型的转换。

比如例子1:


例子2:


结果:


像第二种这样的例子,是对于函数而言,C++不保证所有的函数指针都被一样的使用,所以这样用有时会产生不
确定的结果。所以不建议这样使用。

3、const_cast

const_cast是用于去掉常属性的,方便赋值。

比如:


4、dynamic_cast

dynamic_cast用于将一个父类对象的指针或引用转换为一个子类对象的指针或引用。



在这里,使用dynamic_cast,需要A类为多态类型。

dynamic_cast还有一个特点:

就在上述的代码中,输出pa,pb,可以看出:



· dynamic_cast会先检查是否能转换成功,能成功则转换,不能则返回0

如果换做static_cast就不会检查:



这也是dynamic_cast更安全的地方。

以上就是四种强制类型转换方式。


下面说一个关键字explicit:(阻止隐式调用构造函数)


在这里,隐式调用了我们的构造函数,是因为这里的1比较特殊,所以可以调用成功,但是这种写法本身是不对的。如果换做其他的或许就不行了。为了避免这样的书写,我们会在A()函数前加上关键字explicit。像这样:


这下就编译不过了,提高了代码安全性。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/382853.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面试--输入一堆随机数(0-1000),这里面会有重复的数字,把他们去除掉。然后由大到小排列。

1.问题说明 11 10 20 40 32 67 40 20 89 300 400 15 10 15 20//只显示1次 32 40//只显示1次 67 89 300 400 正常的算法: 1.遍历所有数组,去除掉重复的数字 2.使用XX排序法,进行数字的排序。 眼前一亮的机器算法 1.生成1-1000的数组&am…

c++之类型萃取

刚刚我们接触过模板类,类似于这样的: 在这个类中,我们如何知道它是什么类型的呢?这里,我们可以在类中加入一个内嵌类型,如: 这样就可以知道它是用户自定义的还是本身类型就拥有的,我…

django xadmin出现的问题

1.File “/home/yuanqi/.virtualenvs/djangodev1/lib/python3.5/site-packages/xadmin/sites.py”, line 9, in reload(sys) import importlib importlib.reload(sys)# sys.setdefaultencoding("utf-8")把相应文件改为上述这样

一道面试题--两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同

1.问题说明 十进制4 0100 十进制8 1000二进制不同的 0100 1000有两位不同 正常的算法 1.两个数字与1&#xff0c;拿出两个数字的最后一位&#xff0c;比较是否相同&#xff0c;直到右移32次&#xff0c; for (int i 0; i < 32; i){if ((m & 1) ! (n & 1)){count…

时间复杂度空间复杂度

我们编过不少代码&#xff0c;起初学习的时候我们习惯性的认为&#xff0c;只要代码能正确的运行就ok啦~很少考虑代码的优化带来的好处。今天说一下影响代码性能的两个重要指标--时间复杂度&空间复杂度。 时间复杂度&#xff1a;就是函数&#xff08;指数学中的函数&#…

C语言 函数递归例题解析

1.接受一个整形值&#xff08;无符号&#xff09;&#xff0c;把它转换为 字符并打印它模拟实现strlen()函数。3.求n的阶乘4.斐波那契数列总结 1.接受一个整形值&#xff08;无符号&#xff09;&#xff0c;把它转换为 字符并打印它 void fun(int x) {if (x > 9){fun(x/10)…

xpath 简单用法小记

1 xpath定位 没有某个属性的元素 例如定位没有class属性的td tds tr.xpath(.//td[not(class)])

剖析printf函数

printf是什么&#xff0c;对于起初学习c语言的同学来说肯定都特别的疑惑。在这里&#xff0c;解答一下&#xff1a;它是一个函数。既然是一个函数的话&#xff0c;想必肯定有返回值和参数吧。那么它的返回值和参数是什么呢&#xff1f; 1、看一下这个例子&#xff0c;可能更好…

大端小端详解

文章目录为什么有大端小端&#xff1f;大端&#xff1a;低位放在高地址&#xff0c;高位放在低地址小端&#xff1a;低位放在低地址&#xff0c;高位放在高地址面试考点&#xff1a;代码代码2一道面试题为什么有大端小端&#xff1f; 大端&#xff1a;低位放在高地址&#xff0…

xpath 简单小记

1 定位没有class属性的td元素 tds tr.xpath(.//td[not(class)])

详解volatile关键字

volatile字面意思&#xff1a;易变的。在计算机里&#xff0c;是防止优化的意思&#xff0c;然而是怎么防止优化的呢&#xff1f;待我一一道来哦。 先看这样一个例子&#xff1a; <span style"font-size:18px;">#include<iostream> using namespace std…

C语言 有符号字符型输出 面试题

1.第一题 int main() {int a 128;printf("%u\n", a);system("pause"); } 输出结果 128 #include <stdio.h> #include <stdlib.h>int main() {char a 128;printf("%u\n", a);system("pause"); } 输出结果 42949671…

正则表达式提取括号里面的值

转自 https://blog.csdn.net/jiahaowanhao/article/details/80795148

有趣的链表相关题型

链表&#xff1a;也是线性表的一种。形象的来说&#xff1a; 就像火车的一个个车厢一样&#xff0c;一个个的链起来的。它有一个特点&#xff1a;它的头没有前驱&#xff0c;尾没有后继。 为什么会引入链表这个概念呢&#xff1f;之前我们知道的顺序表&#xff0c;是用数组的形…

简陋版C语言仿真通讯录

文件cotact.c #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include "contact.h" /*初始化*/ void InitContact(pContact pc) {pc->count 0;memset(pc->data, 0, sizeof(pc->data)); }/*增加数据*/ void AddCon…

pip3 便捷安装包

将虚拟环境下 的包列举出来 并保存到文件夹 pip3 freeze > requirments.txt 一次性安装文件里面所列举的所有的包 pip3 install -r requirments.txt

有趣的约瑟夫环问题

大家有没有听过约瑟夫环这个问题呢&#xff1f;我们先来看看它是一个什么样的问题~ 约瑟夫环&#xff08;Josephus&#xff09;问题是由古罗马的史学家约瑟夫&#xff08;Flavius Josephus&#xff09;提出的。该问题的说法不一&#xff0c;传说他参加并记录了公元66—70年犹太…

C语言模拟实现标准库函数之qsort() 2

C语言模拟实现标准库函数之qsort() <1> https://blog.csdn.net/csdn_kou/article/details/80158194 排序数字 int int_cmp(const void *elem1, const void *elem2) { return *(int *)elem1 - *(int *)elem2; }int main() { int arr[] { 9,8,7,6,5,4,3,2,1 }; int siz…

node.js windows下安装与配置

转自 https://www.cnblogs.com/liuqiyun/p/8133904.html