类型强制转换

在编程的时候我们经常遇到类型的强制转换,C++为此提供了更安全的转换方式,在编程中我们更多的应该采用C++提供的类型转换方式

基本类型转换

基本类型转换用的最多,一般将高精度转换为低精度,static_cast关键字用于基本类型转换。

float a = 1.5;
int b = static_cast<int>(a);

上面的列子将浮点型转为整型

常量类型转换

常量类型转换一般将指向变量的指针强制让其指向一个常量

const int  a = 1;
const int* p1 = &a;
int* p2 = const_cast<int*>(&a);

&a的返回值是const int * ,通过**const_cast强制转换为int*类型

普通类型指针转换

使用reinterpret_cast可以将可以实现指向普通类型的指针的类型转换

int a = 0xA0B0C0D0;
char* c = reinterpret_cast<char*>(&a);
for (int i=0; i<4; i++) {
printf("%x\n", *(c+i));
}

上的示例中强制让一个char*指针指向了int型的变量,并对变量中的内容进行了访问。

对象指针类型转换

dynamic_csast运算符用于对象的向上转型或向下转型, 其主要用途是确保可以安全地调用虚函数。dynamic_cast的尖括号中必须为指针或者引用。如果是向下转型,其参数中的指针必须要有虚函数,如果转换失败则为NULL

#include <iostream>
#include <string>
using namespace std; class Person {
public:
Person(){};
virtual ~Person(){cout << "Person" << endl;}
}; class Worker: public Person {
public:
Worker(){};
~Worker(){cout << "Worker" << endl;}
}; int main(void) {
Person* person = dynamic_cast<Person*> (new Worker());
Worker* worker = dynamic_cast<Worker*>(person); //传入的person指针对应的类必须要有虚函数
}

参考

http://www.cnblogs.com/blueoverflow/p/4712369.html

c++之旅:类型的强制转换的更多相关文章

  1. PHP 变量类型的强制转换 & 创建空对象

    PHP 在变量定义中不需要(或不支持)明示的类型定义:变量类型是根据使用该变量的上下文所决定的. 也就是说,如果把一个字符串值赋给变量 var,var 就成了一个字符串.如果又把一个整型值赋给 var ...

  2. C++指针类型间强制转换

    深入理解指针类型间的转换 C++中指针的强制转换 强制类型转换(int).(int&)和(int*)的区别 内存中的地址 地址的本质就是一串0和1的机器代码,内存中的地址没有明确数据类型,但地 ...

  3. 牛客网Java刷题知识点之基本类型的自动转换和基本类型的强制转换

    不多说,直接上干货! TypeConvertDemo.java //自动类型转换 class TypeConvertDemo { public static void main(String[] ar ...

  4. Python变量类型的强制转换

    当我们需要对数据的类型转换时,只需要将数据类型作为函数名即可. 下面给出的函数可以执行数据类型之间的转换,函数返回一个新的对象,表示转换的值 函数格式 使用示例 描述 int(x [,base]) i ...

  5. int类型被强制转换成较低精度的byte类型

    公司的项目上线之前会进行代码合规性检查,其中很容易违反的一个规则就是“不要把原始类型转换成较低的精度”,实际开发的过程中,很多方法在处理数据时,尤其在做移位操作的时候,难免要把int类型转换成byte ...

  6. C#高级编程9-第7章 运算符和类型强制转换

    运算符和类型强制转换 1.运算符 运算符的简化操作 条件运算符: if-else的简化操作,也称三元运算符.如果条件为真,返回一个值,为假返回另外一个值. condition?true_value:f ...

  7. c++无关类型指针的强制转换原理的分析和尝试

    因最近看到大量的c类型指针强制转换,联系到c++的reinterpret_cast强制转换符,故总结一下. 先上图 由图中可以看出,先声明了一个结构体t与一个含有三个元素的数组num,接着声明一个指向 ...

  8. java 中数据的强制转换 和计算的补码运算

    原码 反码 补码的定义与运算 1原码: 原码是将十进制或者其他进制的数转换为二进制表示(且要根据数据的类型转换) 如:130 (默认是Int类型,则是4个字节) 原码是:00000000 000000 ...

  9. Java数据类型转换(自动转换和强制转换)

    数据类型的转换,分为自动转换和强制转换.自动转换是程序在执行过程中“悄然”进行的转换,不需要用户提前声明,一般是从位数低的类型向位数高的类型转换;强制类型转换则必须在代码中声明,转换顺序不受限制. 自 ...

随机推荐

  1. 剑指 offer set 18 数组中只出现一次的数字

    题目描述: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字 思路 1. 思路是先将数组分成两个部分, 两个单个数字分别分到两部分中, 并且数组中其他数字都成 ...

  2. Android之dip、dp、px、sp和屏幕密度

    1. dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA.HVGA和QVGA 推荐使用这 这个,不依 ...

  3. 在VS2013下如何配置DirectX SDK的开发环境_百度经验

    jpg改rar

  4. JZOJ.5315【NOIP2017模拟8.19】小串串

    Description

  5. spring的@Transactional注解详细用法(转载)

    概述 事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性.Spring Framework对事务管理提供了一致的抽象,其特点如下: 为不同的事务API提供一致的编程模型, ...

  6. excel 使用技巧

    计算两个日期的差值 1.计算当前日期与目标日期相差天数,下面例子中当前日期未2017/3/19 2.列增加数据条

  7. Vue.js_础学习之DOM操作

    demo说明: 1.{{message}}                           --“Mustache” 语法(双大括号) 2.v-bind:属性名                   ...

  8. Java基础之MySQL数据库与JDBC

    一.数据库 DBMS         数据库管理系统 是由多个程序构成的专门用来管理大量数据的计算机系统 Server       提供数据存储.检索.计算等服务的网络程序+系统服务 Notifier ...

  9. 遇到的问题mongodb

    1.MongoNetworkError:failed to connect to server? 数据库没有启动,启动mongo数据库就好 2.有些东西真的是要做好记录的,单纯为了自己日后可以查阅比较 ...

  10. Docker与virtualenv

    docker环境统一,组件隔离 关于Docker与virtualenv,其本质是一样的,virtualenv虚拟python运行环境,保证系统python环境的整洁,docker也是一样,只是它虚拟的 ...