[009]类型转换

一、隐式转换

规则:

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));

 

转载于:https://www.cnblogs.com/hustcser/p/3638310.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值