频道栏目
首页 > 程序开发 > 软件开发 > C语言 > 正文
C语言强制类型转换实现方法
2018-04-16 15:05:57         来源:smile_zhangw的博客  
收藏   我要投稿

C语言强制类型转换

1.隐式类型转换

eg:顺序表中在某个位置插入一个数

size_t pos;

for(int i=n-1; i>=pos; i--)

{}

注:i>=pos中,会发生隐式类型的转换,如果pos=0时,导致死循环。

应该为:i>=(int)pos将pos强转为int-----强制类型转换

2.显示的强制类型转换

eg: i>=(int)pos缺点:不规范

C++强制类型转换

1.static_cast //相关类型的转换,相当于C语言的隐式转换

static_cast用于非多态类型的转换(静态转换),任意标准转换都可以用它,但它不能用于两个不相关类型转换

\

2.reinterpret_cast //不相关类型的转化,相当于C语言中的强制类型的转换

reinterpret_cast操作符用于将一种类型转换为另一种不同的类型

3.const_cast //删除数据的常性

const_cast最常用的用途就是删除变量的const属性,方便赋值 \

4.dynamic_cast ----多态类型的转化(前提:必须有继承关系)

dynamic_cast用于将一个父类对象的指针转换为子类对象的指针或引用(动态转换)

向上转型:子类对象指针->父类指针/引用(不需要转换)(切片/切割)

向下转型:父类对象指针->子类指针/引用(用dynamic_cast转型是安全的)

典型例题:

区分pa是指向父类还是子类

#include
using namespace std;

class A
{
public:
	virtual void f()
	{}
};

class B:public A
{};

void fun(A* pa)
{
	//要求区分Pa是指向子类还是父类
	B* pb = dynamic_cast  (pa);
	if(pb)
	{
		cout<<"pa指向子类"<\

注:1.dynamic_cast只能用于含有虚函数的类

2.dynamic_cast会先检查是否能转换成功,能转换成功则转换,不能则返回0

总结:static_cast和reinterpret_cast运算要么直接被编译器拒绝进行转换,要么就一定会得到相应的目标类型的值。 而dynamic_cast却会进行判别,确定源指针所指的内容,是否真的合适被目标指针接受。如果是否定的,那么dynamic_cast则会返回null。

点击复制链接 与好友分享!回本站首页
上一篇:C# 6.0的新特性
下一篇:如何用C语言编写程序:1-1/2+1/3-1/4+1/5......+1/99-1/100?
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站