显示类型转换
被称为强制类型转换(cast)
C风格:(type_id)
C++风格:static_cast, dynamic_cast, reinterpret_cast, const_cast
在《C++的设计和演化》中告诉我们,解决强制性类型转换的最好的解决方法是使用标准的C++的类型转换,也就是上面提到的四个类型转化。下面我们来看看这几个的区别。
static_cast:用法:static_cast(expression)
该运算符把expression转换为type_id类型,但没有运行时的检查来保证转换的安全性。
使用static_cast的情况:1.void指针转其它类型的指针,2.改变通常的的标准转换,3.避免出现可能多种转化的歧义
具体使用情况如下:a.用于类中基类和子类之间指针或引用的转换,进行上行转行,就是把子类的指针或引用转换成基类表示是安全的,相反这是不安全的,原因是没有类型安全检查。

dynamic:dynamic_cast(expression)
该运算符把expression转换成type-id,且这两部分必须是类的指针,类的引用或者void*。
dynamic_cast主要用于类层次间的上行转换下行转换,还可以用于类之前的交叉转换。在上行转换的时候它和 static_cast效果是一样的,在下行转换时,dynamic_cst更安全,应为它具有类型安全功能检查。dynamic_cast还可以使用如下的交叉的类型转换。
class A
{
publc:
int num;
virtul void f(){}
};
class B:public A
{
};

class C: public A
{
};

void f()
{
B* pb1 = new B;
pb1->num = 4;
C* pc1 = static_cast<C*>(pb1);

C* pc1 = dynamic_cast<C*>(pb1);
delete pd1;
}
在上述的函数f中static_cast进行转换是错误的,编译的时候编译器会终止编译,但是dynamic_cast是允许的,结果是空指针。

reinpreter_cast*(expression) type-id 必须是一个指针,引用,算数类型,函数指针或者成员指针。可以把一个指针转换成一个整数,也可以反过来把一个整数转换成一个指针。

const_cast:用法:const_cast(expression)
该运算符用来修改类型的const或volatile属性,除了const和volatile修饰之外type_id和expression的类型是一样的。下面来一个简单列子:
class B{
public:
int iNum;
};
void f()
{
const B b1;
b1.iNum = 100;
B b2 = const_cast(b1);
b2.iNum = 200;
}
上面的b1那里修改值是会报错的,但是b2那里是不会报错的,用为用了cosnt_cast。

C++风格的强制性类型转换的更多相关文章

  1. 尽量采用as操作符而不是旧式C风格做强制类型转换

    http://www.cnblogs.com/JiangSoney/archive/2009/08/07/1541488.html MSDN: https://msdn.microsoft.com/z ...

  2. static_cast与c风格的强制类型转换比较

    转载:https://blog.csdn.net/whatday/article/details/50417503 class A { int a; }; class B { int b; }; cl ...

  3. C++_系列自学课程_第_11_课_类型转换_《C++ Primer 第四版》

    上次说了关于表达式的一些内容,说到还有一些关于数据类型转换的内容,今天我们接着八一八C++中的数据类型转换. 一.隐式类型转换 在表达式中,有些操作符可以对多种类型的操作数进行操作, 例如 + 操作符 ...

  4. dynamic_cast 和 static_cast 隐式类型转换的区别

    首先回顾一下C++类型转换: C++类型转换分为:隐式类型转换和显式类型转换 第1部分. 隐式类型转换 又称为“标准转换”,包括以下几种情况:1) 算术转换(Arithmetic conversion ...

  5. 【面经】【转】C++类型转换

    C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是:type b = (type) a. C++风格的类型转换提供了4种类型转换操作符来应对不同场景的应用. const_cas ...

  6. C++开发必看 四种强制类型转换的总结 [转]

    一.C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是:     TYPE b = (TYPE)a 二.C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用. co ...

  7. C++开发必看 四种强制类型转换的总结

    C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是: TYPE b = (TYPE)a C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用. const_cast ...

  8. C++类型转换总结 转

    一.前言: C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是: TYPE b = (TYPE)a. C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用. con ...

  9. c++的四种强制类型转换

    http://hb.qq.com/a/20110722/001452.htm ...... C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是:TYPE b = (TYPE)a ...

随机推荐

  1. 融合RocksDB, Pregel, Foxx & Satellite Collections 怎样使数据库性能提升35%?

    经过数月的研发测评,开源多模型数据库ArangoDB 终于发布了其 3.2 正式版,该版本消除了两个重大的障碍,添加了一个期待已久的功能,还集成了一个有趣的功能.此外,官方团队表示新版本将 Arang ...

  2. POJ 1953 World Cup Noise

    World Cup Noise Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 14397   Accepted: 7129 ...

  3. 国外12家值得注意的SD-WAN厂商

    国外12家值得注意的SD-WAN厂商 来源 https://www.sdnlab.com/18611.html 在网络行业,围绕软件定义网络的炒作似乎已经殆尽,但业界普遍对软件定义广域网(SD-WAN ...

  4. outline:0与outline:none区别

    outline:0与outline:none的效果完全一样,用哪个都行,为了少写几个字,提倡用outline:0.具体区别如下: 出处: https://stackoverflow.com/quest ...

  5. python 缺少包

    https://pypi.python.org/pypi/pdfminer/20140328 到这里下载相应的包,再进行安装. tar  –xivf  pybloomfilter-1.0 cd  py ...

  6. Python Base Four

    35. In python, file operation syntax is similar to c. open(file,'r',……) //the first parameters is ne ...

  7. 标准C程序设计七---35

    Linux应用             编程深入            语言编程 标准C程序设计七---经典C11程序设计    以下内容为阅读:    <标准C程序设计>(第7版) 作者 ...

  8. linux 中信号量

    ctrl-c 发送 SIGINT 信号给前台进程组中的所有进程.常用于终止正在运行的程序.ctrl-z 发送 SIGTSTP 信号给前台进程组中的所有进程,常用于挂起一个进程.ctrl-d 不是发送信 ...

  9. sql server2008 R2安装总结

    1,卸载注意 在卸载Microsoft SQL Server 2008 R2 安装程序(简体中文) 出现 :“警告 26003.无法卸载 Microsoft SQL Server 2008 R2 安装 ...

  10. hdu3338 / 方格横纵和问题终极版,最大流斩

    此题被誉为神奇最大流,诱惑我去做了下,感觉也是通常的思路. 题意:1.用1-9去填,满足所给的行/列和要求(和那个什么游戏差不多...) 求一种合法方案,输出.如:   一看,直接就建图了,每个点在白 ...