首页 > 其他 > 详细

[009]类型转换

时间:2014-04-02 09:57:59      阅读:447      评论:0      收藏:0      [点我收藏+]

一、隐式转换

规则:

a.混合类型的表达式中,其操作数被转为相同的类型

b.用作条件的表达式被转为bool类型

c.用一表达式初始化某个变量,或将一表达式赋值给某个变量,则该表达式被转换为该变量的类型

二、显示转换(强制类型转换)

1.为什么要进行强制类型转换?

   a.需要覆盖通常的标准转换

   b.可能存在多种转换,需要选择一种特定的转换方式

2.转换形式:

      cast-name<type>(expression);

   cast-name根据情况的不同,又分为static_cast、dynamic_cast、const_cast 和 reinterpret_cast。

   ◆static_cast

      ?编译器隐式执行的任何类型转换都可以用static_cast显示完成。

      ?需要将一个较大的数据类型赋值给较小的类型时使用。

      ?可以将存放在void*中的指针值强制转换为原来的指针类型。

double i = 3.14;
void*p = &i;
double *pd = static_cast<double*>(p);

   ◆dynamic_cast

      暂不做论述

   ◆const_cast

      ?去除原本的const属性

const int* p = 0;
int* pi = const_cast<int*>(p);

   ◆reinterpret_cast

      ?为操作数的位模式提供较低层次的重新解释

int *p = 0;
char *pc = reinterpret_cast<char*>(p);

 pc所指向的真实对象是int型,而非字符数组,如果用pc去初始化string对象,则会错误:

string str(pc);

3.旧式强制转换:

type (expr); // Function-style cast notation  
(type) expr; // C-language-style cast notation  

比如:

int i;
double j;
int *p;
char* pc = (char*)p;
int i = int (j);

三、具体的转换例子:

const string*ps;
void *pv;
如果要实现:
pv = (void*)ps;
我们可以使用强制转换:
pv = static_cast<void*>(const_cast<string*>(ps));

[009]类型转换,布布扣,bubuko.com

[009]类型转换

原文:http://www.cnblogs.com/hustcser/p/3638310.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!