c++中4个与类型转换相关的关键字分析

时间:2021-03-03 09:28:52

static_cast  

reinterpret_cast

dynamic_cast

const_cast

1.**static_cast------运算符完成相关类型之间的转换**

使用场景:如在同一类层次结构中的一个指针类型到另一个指针类型,整型到枚举类型,或者浮点型到整型等。

例:  1,  int m=10;

     double n=static_cast < int > m;

    2, int * q=static_cast < int* >(malloc(100));

2.**reinterpret_cast------处理互不相关类型之间的转换**

使用场景:如从整型到指针,一种类型的指针到另一种类型的指针等

例: int a=10;

   double* b=reinterpret_cast<double*>(a); //b的转换结果为0x0000000a

3.**dynamic_cast------处理基类型到派生类型的转换**(这个说法不是很准确,为了好理解先这么写)

使用场景:基类必须有虚函数,即为多态时,可以转换

例:

class Base

{

public:

   virtual int test(){return ;} //基类中存在虚函数,故在派生类中存在虚函数指针指向虚函数表。

};

class Derived:public Base

{

public:

   virtual int test(){return ;}

};

int main()

{

Base cbase;

Derived cderived;

Base *p1=new Base;

Base *p2=new Derived;

Derived* pD1=dynamic_cast<Derived*>(p1);//p1没有真正指向派生类,pD1置为0

Derived* pD2=dynamic_cast<Derived*>(p2); //正确

//Derived& pd1=dynamic_cast<Derived&>(*p1);//p1没有真正指向派生类,pd1抛出异常

Derived& pd2=dynamic_cast<Derived&>(*p2);//正确

return ;

}

 4,const_cast用来移除变量的const或volatile限定符。

一句话:强制去掉const(或volatile)  必须使用const_cast 。

注:
volatile的作用是: 作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值.
简单地说就是防止编译器对代码进行优化.比如如下代码:
a=1;
a=2;
a=3;
a=4;
对外部硬件而言,上述四条语句分别表示不同的操作,会产生四种不同的动作,但是编译器却会对上述四条语句进行优化,认为只有a=4(即忽略前三条语句,只产生一条机器代码)。如果键入volatile,则编译器会逐一的进行编译并产生相应的机器代码(产生四条代码).

c++中4个与类型转换相关的关键字分析的更多相关文章

  1. C&plus;&plus;中,有哪4种与类型转换相关的关键字?各有什么特点?应该在什么场合下使用?

    转:https://www.cnblogs.com/mjiang2017/p/9358032.html C++中,四个与类型转换相关的关键字:static_cast.const_cast.reinte ...

  2. C&plus;&plus;中4个类型转换相关的关键字&sol;特点/应用场合

    reinterpret_cast是C++里面的一个强制类型转换符,能够将任何的指针类型转换成其他的任何指针类型:能够将任何的整数类型转换成指针类型,反之亦然:滥用reinterpret_cast强制类 ...

  3. &lbrack;&period;net 面向对象编程基础&rsqb; &lpar;4&rpar; 基础中的基础——数据类型转换

    [.net面向对象编程基础] (4)基础中的基础——数据类型转换 1.为什么要进行数据转换? 首先,为什么要进行数据转换,拿值类型例子说明一下, 比如:我们要把23角零钱,换成2.30元,就需要把整形 ...

  4. 谈谈MVC项目中的缓存功能设计的相关问题

    本文收集一些关于项目中为什么需要使用缓存功能,以及怎么使用等,在实际开发中对缓存的设计的考虑 为什么需要讨论缓存呢? 缓存是一个中大型系统所必须考虑的问题.为了避免每次请求都去访问后台的资源(例如数据 ...

  5. css中的字体及文本相关属性

    css中的字体及文本相关属性 1.字体相关属性 字体主要可以设置color.font-family.font-size.font-size-adjust.font-stretch.font-style ...

  6. 《同一个类中不同方法之间的调用相关问题(省略的类名或者this)》

    //同一个类中不同方法之间的调用相关问题(省略的类名或者this) class A { public void B() { System.out.println("b方法运行"); ...

  7. 简单讲解iOS应用开发中的MD5加密的相关使用&lt&semi;转&gt&semi;

    这篇文章主要介绍了iOS应用开发中的MD5加密的相关使用,示例代码基于传统的Objective-C,需要的朋友可以参考下 一.简单说明 1.说明 在开发应用的时候,数据的安全性至关重要,而仅仅用POS ...

  8. 简单讲解iOS应用开发中的MD5加密的相关使用

      简单讲解iOS应用开发中的MD5加密的相关使用   作者:文顶顶 字体:[增加 减小] 类型:转载 时间:2015-12-19 我要评论 这篇文章主要介绍了iOS应用开发中的MD5加密的相关使用, ...

  9. sqlserver搜索中怎么把varchar类型转换成numeric类型

    sqlserver搜索中怎么把varchar类型转换成numeric类型 可以用cast来转换 如:列名叫grade,表名为A select cast(grade as numeric(y,x)) f ...

随机推荐

  1. mysql5&period;5字符集设置的一点变化(对于中文乱码问题,需要设置mysql字符集)

    工作中因为字符集问题没少头疼,还犯过一次错误,还好拯救及时,没有发生重大事故,唉,弄清楚点还是非常有必要的: 例如我的工作环境为CTR+redhat5+mysql5.5 在导入sql语句的时候必须要注 ...

  2. codeforces 682C Alyona and the Tree DFS

    这个题就是在dfs的过程中记录到根的前缀和,以及前缀和的最小值 #include <cstdio> #include <iostream> #include <ctime ...

  3. &lbrack;转载&rsqb;Jquery Form插件表单参数

    表单插件API提供了几个方法,让你轻松管理表单数据和进行表单提交. ajaxForm增 加所有需要的事件监听器,为AJAX提交表单做好准备.ajaxForm不能提交表单.在document的ready ...

  4. oracle 表空间常用语句

    –查询表空间使用情况 SELECT UPPER(F.TABLESPACE_NAME) "表空间名", D.TOT_GROOTTE_MB "表空间大小(M)", ...

  5. win32程序调试OutputDebugString 类似printf格式化输出

    有没有win32编程因为打印变量调试程序而头疼呢.方法二的函数完全类似printf.非常完美.方法一:不带参数输出如printf("hello world"); OutputDeb ...

  6. 哈密顿绕行世界问题 (dfs)

    一个规则的实心十二面体,它的 20个顶点标出世界著名的20个城市,你从一个城市出发经过每个城市刚好一次后回到出发的城市.  Input前20行的第i行有3个数,表示与第i个城市相邻的3个城市.第20行 ...

  7. C&plus;&plus;学习札记(2)

    重载构造函数 #include <iostream> using namespace std; class rectangle { public: rectangle(){cout< ...

  8. HDU3336 Count the string KMP 动态规划

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - HDU3336 题意概括 给T组数据,每组数据给一个长度为n的字符串s.求字符串每个前缀出现的次数和,结果mo ...

  9. 从零开始一起学习SLAM &vert; 为啥需要李群与李代数?

    很多刚刚接触SLAM的小伙伴在看到李群和李代数这部分的时候,都有点蒙蒙哒,感觉突然到了另外一个世界,很多都不自觉的跳过了,但是这里必须强调一点,这部分在后续SLAM的学习中其实是非常重要的基础,不信你 ...

  10. Scala函数式对象-有理数

    有理数类的表示 实现规范:支持有理数的加减乘除,并支持有理数的规范表示 1.定义Rational 首先,考虑用户如何使用这个类,我们已经决定使用“Immutable”方式来使用Rational对象,我 ...