【转】C++四种类型转换方式
C++四种类型转换方式
C风格的强制类型转换(Type Case)很简单,不管什么类型的传统转换都是:Type b = (Type)a,但是C风格的类型转换有不少的缺点,有的时候用C风格的转换是不合适的,因为它可以在任意类型之间进行转换,比如你可以把一个指向const类型的指针转换成指向非const类型的指针,把一个指向基类对象的指针指向派生类对象的指针,这两者之间的转换差距是巨大的,但是传统的C风格的转换没有区分这些。还有一个缺陷,C风格的转换不容易查找,它有一个括号和一个标识符组成,而这样的东西在C++程序中一大堆。所以C++为了克服这些缺陷,引进了四种类型转换操作符。
1、static_cast
功能:完成编译器认可的隐式类型转换
格式:
type1 a;
type2 b = static_cast(a); //将type1类型转换成type2类型
使用范围:
(1) 基本数据类型之间的转换,如int->double
int a = 6;
folat b = static_cast(a);
(2) 基类和派生类之间的转换,但只能用于类的指针或者引用之间的转换
class base{};
class derived:public base{};
base *b;
derived *d = new derived();
b = static_cast<base *>(d)
2、dynamic_cast
功能:基类和派生类之间的转换,但只能用于类的指针或者引用之间的转换
格式:
(1) 其他三种都是编译时完成的,dynamic_cast是运行时处理的,运行时需要进行类型检查;
(2) 基类中要有虚函数,因为类型检查的类型信息在虚函数表中,有虚函数才会有虚函数表;
(3) 可以实现向上转型和向下转型,前提必须使用public或protected继承;
例子:
class base
{
virtual void fun();
}
class derived:public base
{
void fun();
}
base *b;
derived *d = new derived();
b = static_cast<base *>(d)
3、const_cast
功能:只能对指针或引用去除或者添加const属性,只能改变同种类型的const属性
常用用法:
(1) 常用于函数的形参是一个非const的引用,我想要传进去一个const的引用,可以使用const_cast去除参数的常亮性,以便函数能够接受这个参数;
(2) 一个const对象,我们想要调用该对象中的非const函数,可以使用const_cast去除对象的常亮性;
4、reinterpret_cast
从字面意思就是“重新解释的类型转换”。也就是说任意两个类型之间都可以使用使用reinterpret_cast进行类型转换。
https://blog.csdn.net/u010154685/article/details/51800235
reinterpret_cast的功能比static_cast的功能更为强大,但安全性也更为的差,可以用它完成C++语法上不允许的\
转换,在某些情况下程序员有需要的转换。例如,可以把某种引用或指针类型转换为其他引用类型或指针类型(两\
个类型可以不相关),这个关键字还经常将指针转换为void*,以及将void*转换为指针。
下面通过代码说明reinterpret_cast的使用:
#include <iostream>
using namespace std;
//测试int 和 void*的相互转化
void test_voidpointer(void *data){
int d = reinterpret_cast<int>(data);
cout << d << endl;
}
//定义连个无关类A, B
class A{
};
class B{
};
int _tmain(int argc, _TCHAR* argv[])
{
//void* 和in的相互转化,这里应该注意一下64位平台和32位平台指针的大小不同
test_voidpointer(reinterpret_cast<void *>(20));
//A a;
B b;
//a = reinterpret_cast<A>(b); //编译通不过,b不知指针或者引用
//下面是指针或引用的转化
A *pa = reinterpret_cast<A*>(&b);
A &ra = reinterpret_cast<A&>(b);
system("pause");
return 0;
}
【转】C++四种类型转换方式的更多相关文章
- c++ --> c++中四种类型转换方式
c++中四种类型转换方式 c风格转换的格式很简单(TYPE)EXPRESSION,但是c风格的类型转换有不少缺点, 1)它可以在任意类型之间转换,比如你可以把一个指向const对象的指针转换成指向 ...
- 【C++】类型转换简述:四种类型转换方式的说明及应用
本文主要简述在C++中四种类型转换的方式:static_cast.reniterpret_cast.const_cast和dynamic_cast. 在介绍C++类型转换方式之前,我们先来看看C语言的 ...
- C++四种类型转换方式。
类型转换有c风格的,当然还有c++风格的.c风格的转换的格式很简单(TYPE)EXPRESSION,但是c风格的类型转换有不少的缺点,有的时候用c风格的转换是不合适的,因为它可以在任意类型之间转换,比 ...
- C++中四种类型转换方式
类型转换有c风格的,当然还有c++风格的.c风格的转换的格式很简单(TYPE)EXPRESSION,但是c风格的类型转换有不少的缺点,有的时候用c风格的转换是不合适的,因为它可以在任意类型之间转换,比 ...
- C++中四种类型转换方式(ynamic_cast,const_cast,static_cast,reinterpret_cast)
Q:什么是C风格转换?什么是static_cast, dynamic_cast 以及 reinterpret_cast?区别是什么?为什么要注意? A:转换的含义是通过改变一个变量的类型为别的类型从而 ...
- C++语言中的四种类型转换
1 引子 这篇笔记是根据StackOverflow上面的一个问题整理而成,主要内容是对C/C++当中四种类型转换操作进行举例说明.在之前其实对它们都是有所了解的,而随着自己在进行总结,并敲了一些测试示 ...
- 从零开始学C++之从C到C++(二):引用、内联函数inline、四种类型转换运算符
一.引用 (1).引用是给一个变量起别名 定义引用的一般格式:类型 &引用名 = 变量名: 例如:int a=1; int &b=a;// b是a的别名,因此a和b是同一个单元 注 ...
- C++中的4种类型转换方式
类型转换有c风格的,当然还有c++风格的.c风格的转换的格式很简单(TYPE)EXPRESSION,但是c风格的类型转换有不少的缺点,有的时候用c风格的转换是不合适的,因为它可以在任意类型之间转换,比 ...
- 引用、数组引用与指针引用、内联函数inline、四种类型转换运算符
一.引用 (1).引用是给一个变量起别名 定义引用的一般格式:类型 &引用名 = 变量名: 例如:int a=1; int &b=a;// b是a的别名,因此a和b是同一个单元 ...
随机推荐
- Oracle 拼接字符串
Tom大神写的 CREATE OR REPLACE FUNCTION stragg(input varchar2) RETURN varchar2 PARALLEL_ENABLE AGGREGATE ...
- centos命令行系列之升级glibc到
1.从http://ftp.gnu.org/gnu/glibc/glibc-2.17.tar.gz 下载文件 2.安装部署 [root@kafzook1 /]# tar -xf glibc-2.17. ...
- GIS入门基础知识点
自从国企辞职以后,找了一份关于GIS开发的工作,好多从事这个都是地理信息科学方面的专业.由于自己才疏学浅,只能从头入门学起,先是大致了解公司的业务以及产品,学习一下相关地理信息的基础知识. 首先今天简 ...
- 解决 TCP_socket 粘包问题
所谓粘包问题主要还是C/S两端数据传输时 因为接收方不知道消息之间的界限,不知道一次性提取多少字节的数据所造成的 根本原因:粘包是由TCP协议本身造成的,TCP为提高传输效率,发送方往往要收集到足够多 ...
- 快捷键设置 keyiing.json
// 快捷键设置 keyiing.json // 将键绑定放入此文件中以覆盖默认值 [ /* // 转换大写 { "key" : "ctr ...
- linux command useradd
Linux command useradd [Purpose] Learning linux command useradd to create a new user or update ...
- vue数据请求显示loading图
一般项目中,有时候会要求,你在数据请求的时候显示一张gif图片,然后数据加载完后,消失.这个,一般只需要在封装的axios中写入js事件即可.当然,我们首先需要在app.vue中,加入此图片.如下: ...
- 【MVC】快速构建一个图片浏览网站
当抄完MusicStore时,你应该对MVC有一个比较清晰的认识了.接下来就需要做个网站来继续增加自己的知识了.那么,该做个什么网站呢.做个图片浏览网站吧,简单而实用. 简单设计 1.首先,页面中间是 ...
- Python之路-python基础一
本章内容: 一.编程语言分类 二.python之变量介绍 三.python交互命令(input,print,getpass) 四.Python之循环控制 ...
- zookeeper:shell操作以及可视化工具的使用
1.zkcli.sh基本使用 1-1 查看节点 进入zk的bin目录下执行./zkCli.sh ls命令可以查看节点,/zookeeper/quota是默认的节点 1-2新增节点 create key ...