Cpp_类型转换
来源:互联网 发布:三级域名申请 编辑:程序博客网 时间:2024/05/29 13:11
C风格的类型转换C++完全兼容。
C++新增了四个显式类型转换运算符。
1)静态类型转换:static_cast<目标类型>
A.将基类的指针或引用转换为子类的指针或引用;
B.自定义类型转换。
它允许子类类型的指针转换为父类类型的指针(这是一个有效的隐式转换),同时,也能够执行相反动作:转换父类为它的子类,但会给出编译警告
下面的例子中,被转换的父类没有被检查是否与目的类型相一致。
class Base {};class Derived : public Base {};Base *a = new Base;Derived *b = static_cast<Derived *>(a); //子类的指针指向父类的对象
基础类型之间的标准转换:
double d = 3.14159265;int i = static_cast<int>(d);
2)动态类型转换:dynamic_cast<目标类型>
将基类的指针或引用转换为子类的指针或引用,在运行期检查基类指针或引用的目标对象是否真的是所要转换的子类类型。保证了“安全的向下转型(safe downcasting)”
它允许任意的隐式类型转换(基类指针指向子类)以及相反过程。不过,与static_cast不同,在后一种情况里(注:即隐式转换的相反过程),dynamic_cast会检查操作是否有效。
检测在运行时进行。如果被转换的指针不是一个被请求的有效完整的对象指针,返回值为NULL.
代码:
class Base { virtual dummy() {} };class Derived : public Base {};Base* b1 = new Derived;Base* b2 = new Base;Derived* d1 = dynamic_cast<Derived *>(b1); //succeedsDerived* d2 = dynamic_cast<Derived *>(b2); // fails: returns 'NULL',在子类的指针看来,基类的对象是不完整的。bad_cast的异常类型被抛出
3)常量类型转换:const_cast<目标类型>
去除或添加指针或引用的常属性。
4)重解释类型转换:reinterpret_cast<目标类型>
A.任意类型的指针或引用之间进行转换;
B.在指针和整数之间进行转换。
这个操作符能够在非相关的类型之间转换。操作结果只是简单的从一个类型的指针到别的类型的指针的值的二进制拷贝。
例如:
A * a = new A;B * b = reinterpret_cast<B *>(a);
0 0
- Cpp_类型转换
- Cpp_引用
- Cpp_继承
- Cpp_多态
- Cpp_链表
- Cpp_函数重载
- Cpp_函数缺省参数
- Cpp_内联函数
- Cpp_动态内存分配
- Cpp_类和对象
- Cpp_构造函数
- Cpp_析构函数
- Cpp_静态成员
- Cpp_成员指针
- Cpp_操作符重载
- Cpp_异常处理
- Cpp_顺序表
- Cpp_继承&对象模型
- leetcode-94-Binary Tree Inorder Traversal
- lintcode:Remove Node in Binary Search Tree
- 利用php的explode函数将字符串按分隔符(比如空格)分拆并组装在数组中-----要考虑连续空格问题
- UVA 442(p141)----Matrix Chain Multiplication
- HDU 2222 Keyword Search(AC自动机)
- Cpp_类型转换
- HDMI和SDI的简介
- codeforces 589H DFS
- android 自定义TopBar的使用
- 网络---大文件的下载(NSURLConnection)
- 可调用对象
- UVA 455(p57)----Periodic Strings
- 史上最全的CSS hack方式一览
- 深夜学网页(2)——html(2)