C++ 四种类型转换
在写代码中经常会有很多的隐式类型转换或显式类型转换。
对于隐式的类型转换主要是放生在赋值的时候,讲变量赋值给不同类型的变量的时候就会发生类型转换,如果是宽化转换(即从占字节少的类型向占字节多的类型转换),这个时候是不会出现丢失数据的。如果是窄化转换(从占字节多的类型向占字节少的类型转换),这个时候就很有可能会出现丢失数据,或者数据错误(如从有符号向无符号转换,就可能会出现各种无法想象的问题)。。。所以这种情况应该尽量避免。
对于C风格显式转换,就是强制转换,可能会造成数据解释错误,也是很不安全的。
在C++中有四种类型转换:
static_cast <new_type> (expression) 静态转换
静态转换类似于C风格显式转换,但是会判断转换类型之间的关系,如果转换类型之间没有任何关系,则不可转换,编译器会报错。(不相关类型之间不可以发生转换).
dynamic_cast <new_type> (expression) 动态转换
动态转换有两个约束条件:其一是要求new_type为指针或引用,其二是下行转换时要求基类是多态的(基类中包含至少一个虚函数)。
动态转换支持上行转换和下行转换,但是对于不安全的下行转换,会返回NULL,提高安全性(上行转换:子类转化为父类,下行转换:父类转化为子类)。
reinterpret_cast <new_type> (expression) 重解释转换
重解释转换则是任何两个类型之间都可以转换,是最不安全的一种类型转换,尽量不要用。
const_cast <new_type> (expression) 常量向非常量转换
将常量转换为非常量,这个转换并不转换原常量本身,只是它返回的结果为非常量了
读:http://www.cnblogs.com/jerry19880126/archive/2012/08/14/2638192.html总结,仅个人笔记。
C++ 四种类型转换的更多相关文章
- [转]C++中四种类型转换符的总结
C++中四种类型转换符的总结 一.reinterpret_cast用法:reinpreter_cast<type-id> (expression) reinterpret_cast操 ...
- 从零开始学C++之从C到C++(二):引用、内联函数inline、四种类型转换运算符
一.引用 (1).引用是给一个变量起别名 定义引用的一般格式:类型 &引用名 = 变量名: 例如:int a=1; int &b=a;// b是a的别名,因此a和b是同一个单元 注 ...
- c++ --> c++中四种类型转换方式
c++中四种类型转换方式 c风格转换的格式很简单(TYPE)EXPRESSION,但是c风格的类型转换有不少缺点, 1)它可以在任意类型之间转换,比如你可以把一个指向const对象的指针转换成指向 ...
- 【转】C++四种类型转换方式
C++四种类型转换方式 https://blog.csdn.net/lv_amelia/article/details/79483579 C风格的强制类型转换(Type Case)很简单,不管什么类型 ...
- C++语言中的四种类型转换
1 引子 这篇笔记是根据StackOverflow上面的一个问题整理而成,主要内容是对C/C++当中四种类型转换操作进行举例说明.在之前其实对它们都是有所了解的,而随着自己在进行总结,并敲了一些测试示 ...
- 引用、数组引用与指针引用、内联函数inline、四种类型转换运算符
一.引用 (1).引用是给一个变量起别名 定义引用的一般格式:类型 &引用名 = 变量名: 例如:int a=1; int &b=a;// b是a的别名,因此a和b是同一个单元 ...
- C++中四种类型转换以及const_cast是否能改变常量的问题
we have four specific casting operators:dynamic_cast, reinterpret_cast, static_cast and const_cast. ...
- 【C++】类型转换简述:四种类型转换方式的说明及应用
本文主要简述在C++中四种类型转换的方式:static_cast.reniterpret_cast.const_cast和dynamic_cast. 在介绍C++类型转换方式之前,我们先来看看C语言的 ...
- C++四种类型转换方式。
类型转换有c风格的,当然还有c++风格的.c风格的转换的格式很简单(TYPE)EXPRESSION,但是c风格的类型转换有不少的缺点,有的时候用c风格的转换是不合适的,因为它可以在任意类型之间转换,比 ...
随机推荐
- Python正则化学习
- Appium 服务关键字
Appium 服务关键字 关键字 描述 实例 automationName 你想使用的自动化测试引擎 Appium (默认) 或 Selendroid platformName 你要测试的手机操作系统 ...
- [Java] 特殊正则-替换字符串
public class Test { public static void main(String[] args) { String str = "2412rhttp://192.168. ...
- web.Config配置数据库的连接
<!--连接字符串设置--> <connectionStrings> <add name="ConnString" connectionString= ...
- vs中部分快捷键
ctrl + r ctrl + r ctrl 按两次r修改变量名(修改被引用到的变量名),不同于ctrl + f(修改全部相同名字的) ctrl +r ctrl + m 先选中一部分da ...
- H:Highways
总时间限制: 1000ms 内存限制: 65536kB描述The island nation of Flatopia is perfectly flat. Unfortunately, Flatopi ...
- Android开发--ListView的应用
1.简介 ListView用于以列表的形式展示数据.它在装载数据时,不能使用ListView类的add()等相关方法添加,而要借助Adapter对象进行添加.另外,由于 系统提供的Adapter往往不 ...
- Web APP开发技巧总结(转)
一.META/LINK相关: 1.百度禁止转码 通过百度手机打开网页时,百度可能会对你的网页进行转码,往你页面贴上它的广告,非常之恶心.不过我们可以通过这个meta标签来禁止它: <meta h ...
- jQuery 绑定事件
$('input').bind('click mouseover', fn); $('input').bind({ mouseover: fn(){}, mouseover:fn(){} }); 删除 ...
- SQL指定字段指定顺序排序
SELECT * FROM [ProjectInfo]ORDER BY (CASE DepartmentName WHEN 'AAA' THEN 1 WHEN 'BBB' THEN 2 WHEN 'C ...