码迷,mamicode.com
首页 > 编程语言 > 详细

C++类型转换

时间:2015-08-26 22:34:45      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:c++类型转换

C++类型转换

一 隐式类型转换

  在C++语言中,某些类型之间有关联。如果两种类型有关联,那么当程序需要其中一种类型类型的运算对象时,可以用另一种关联类型的对象或者值来替代。

        

   Intival = 3.4 + 3;  //编译器提示损失精度

 

  加法的两个运算对象类型不同:3.4为double类型,3位int类型。C++不会将两个不同类型的值直接相加,而是根据类型转换规则设法将运算对象的类型统一后再求值,上述类型转换自动进行,称之为隐式类型转换

        

  算数类型之间的饮食转换被设计的尽可能避免损失精度。如上:int ival = 3.4 + 3;首先将3转换为double类型,之后与3.4相加,最后赋值,将double类型值赋给int类型,损失了小数部分,所以编译器会发出警告。

 

隐式类型转换规则(需要转换时):

  1 比int类型小的提升为较大的整数类型

  2 条件表达式中,非布尔值转换为布尔类型

  3 初始化时,初始值转换为变量的类型;赋值时,右侧运算对象转换为左侧运算对象类型

  4 若算数运算或者关系运算的运算对象有多种类型,需转换为同一种类型

  5 数组转换为指针(赋值,初始化,函数调用是发生)

 

二 显式类型转换

  1 C语言中的类型转换也可用在C++中

    如:

int a = 1;
double b = 1.1;

                           

    显式类型转换方法如下所示

a= (int)b;
a= int(b);
a= (int)(b)


 

  2 static_cast-任何具有明确定义的类型转换,只要不包含底层const,都可使用static_cast

 

   如:

double value = static_cast<double>(i) / j;
                           
void *p = &value;
double *dp = static_cast<double*>(p);

 

  3 const_cast-只能改变运算对象底层const(或称之为去const性质)

                

   如:

const char* pc;
char *p = const_cast<char*>(pc); //正确,但是通过p写值是未定义的行为

 

  4 reinterpret_cast – 为运算对象的位模式提供较低层次的解释

                           

   如:

int *iPtr;
char*cPtr = reinterpret_cast<char*>(ip)

   这里cPtr将iPtr指向的地址使用使用char*解释,即*cPtr为某个字符

   注意:必须谨记cPtr是指向iPtr;若把pc当成普通字符串可能会发生运行时错误

 

  5 dynamic_cast – 用于将基类指针或引用安全的转换为派生类的指针或者引用 

   如果转换类型是指针并且失败了,则返回0

   如果转换目标是引用并且失败了,则抛出bad_cast异常

版权声明:本文为博主原创文章,未经博主允许不得转载。

C++类型转换

标签:c++类型转换

原文地址:http://blog.csdn.net/u013507368/article/details/48009497

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!