c++ 数据类型转换: static_cast dynamic_cast reinterpret_cast const_cast  [版权声明]转载请注明出处 http://www.cnblogs.com/TenosDoIt/p/3175217.html [目录] 引言 static_cast 定义 dynamic_cast 定义 举例:下行转换(把基类的指针或引用转换成子类表示) 举例:上行转换(把子类的指针或引用转换成基类表示) 举例: static_cast 用于基本类型之间.基本类型指针…
C++是一门弱类型的语言,提供了许多复杂和灵巧类型转换的方式.笔者之前写的Python与Go都是强类型的语言,对这种弱类型的设计实在是接受无力啊~~ ( 生活所迫,工作还得写C++啊~~)C++语言提供了四种类型转换的操作:static_cast,dynamic_cast,reinterpret_cast,const_cast,今天就来聊一聊,在C++之中应该如何来使用这些类型转换的. 1.旧式类型转换 开门见山,先聊聊笔者对类型转换的看法吧.从设计上看,一门面向对象的语言是不一样提供类型转换的…
static_cast <type-id> ( expression ) 和C风格的类型转换相似,可以转换一个指针到基类,或者派生类.不做Run-time类型检查,这样转换并不总是安全的.也可以转换枚举类型到int或者int到float.使用static_cast从基类指针转换成派生类指针可能不安全,因为派生类可能有基类没有的函数或者变量.但是从派生类指针转换成基类指针,通常是安全的.reinterpret_cast < type-id > ( expression )允许指针类型…
static_cast最像C风格的强制转换,很多时候都需要程序员自身去判断转换是否安全.但是相对C风格的强制转换,在无关类的类指针之间转换上,有安全性的提升. dynamic_cast是运行时的转换吧,要求new_type为指针或引用,其二是下行转换时要求基类是多态的(基类中包含至少一个虚函数).dynamic_cast可以识别出不安全的下行转换,但并不抛出异常,而是将转换的结果设置成null.这个dynamic也有很多问题.需要运行时确定类型信息, 说明设计有缺陷?https://www.zh…
static_cast 1. 基础类型之间互转.如:float转成int.int转成unsigned int等 2. 指针与void*之间互转.如:float*转成void*.CBase*转成void*.函数指针转成void*.void*转成CBase*等 3. 派生类指针[引用]转成基类指针[引用].如:Derive*转成Base*.Derive&转成Base&等 4. 非virtual继承时,可将基类指针[引用]转成派生类指针[引用](多继承时,会做偏移处理).如:Base*转成Der…
隐式转换(implicit conversion) ; int b; b=a; short是两字节,int是四字节,由short型转成int型是宽化转换(bit位数增多),编译器没有warning,如下图所示.宽化转换(如char到int,int到long long,int到float,float到double,int到double等)构成隐式转换,编译器允许直接转换. 但若反过来 ; short b; b=a; 此时,是从8字节的double型转成2字节的short型变量,是窄化转换,编译器就…
之前一直以为as就是强制类型转换,只是as是AS3中新的语法,之前用在有继承关系的对象之间的转换也无甚区别,但是今天却让我领悟到了它俩之间的区别. 原起:今天要给ColorPicker控件动态赋值,它的selectedColor属性接收的是一个uint属性,而我要从另一个对象中拿过来的属性是String的,理所当然的我写了如下的代码: 经过: var color:uint = str as uint;//str是String类型,大概是这个样子 显然,没有效果,跟踪之后,color是null值,…
string a="123"; int i=(int)a; 这是会出现错误因为:强制类型转换只能转换值类型不能转换引用类型 string属于引用类型    强制类型转换时如果值类型为小数则直接舍位  如: int i=(int)123.6  结果为:123 int.parse()里边的值只能是string类型,他也只能转换string里边的整数如: string a="123"    string a="123.4"就会出错  也不能转换值为nu…
前言 使用as和强制类型转换的时候的区别是否仅仅是代码形式上的区别. 答案是肯定不是的. 正文 看两段代码: object o = Factory.GetObject(); Student student = o as Student; if (student != null) { //dosomething } 和 object o = Factory.GetObject(); Student student = o as Student; try { Student student = (S…
reinterpret_cast(重新解释类型转换) reinterpret_cast 最famous的特性就是什么都可以,转换任意的类型,包括C++所有通用类型,所以也最不安全 应用 整形和指针之间的相互转化 指针和引用转化为任意类型的指针和引用 示例 class a: class b:a: class c; b& ref_b = reinterpret_cast<b&>c; //编译可以通过 static_cast(静态类型转换) static_cast 只提供编译时的类型…