学习一下-记录一下
C++博客
首页
新随笔
联系
聚合
管理
<
2010年11月
>
日
一
二
三
四
五
六
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
随笔分类
(44)
Algorithm(8)
(rss)
C/C++(10)
(rss)
D3D(12)
(rss)
NetWord(3)
(rss)
Other(11)
(rss)
随笔档案
(28)
2012年2月 (1)
2011年2月 (2)
2010年12月 (2)
2010年11月 (2)
2010年10月 (6)
2010年9月 (1)
2010年8月 (1)
2010年7月 (4)
2010年6月 (4)
2010年5月 (2)
2010年3月 (3)
最新随笔
1. VS2010 设置include路径(转)
2. 渲染到纹理(转)
3. d3d资源管理(转)
4. 纹理过滤
5. c/c++中内存区域划分大总结
最新评论
1. re: 约瑟夫环的问题
评论内容较长,点击标题查看
--陈晨
2. re: 约瑟夫环的问题
代码问题,
m %= n;
下面还需要继续更新这个值。
--keen
3. re: 渲染到纹理(转)
学习了
--yjwx
四种强制转换类型运算符
Posted on 2010-11-02 11:01
小火球
阅读(310)
评论(0)
编辑
收藏
引用
所属分类:
C/C++
标准c++中主要有四种强制转换类型运算符:
const_cast
,
reinterpret_cast
,
static_cast
,
dynamic_cast
等等。
1)
static_cast
<T*>(a)
将地址a转换成类型T,T和a必须是指针、引用、算术类型或枚举类型。
表达式
static_cast
<T*>(a), a的值转换为模板中指定的类型T。在运行时转换过程中,不进行类型检查来确保转换的安全性。
例子:
class
B { ... };
class
D :
public
B { ... };
void
f(B* pb, D* pd)
{
D* pd2 =
static_cast
<D*>(pb);
// 不安全, pb可能只是B的指针
B* pb2 =
static_cast
<B*>(pd);
// 安全的
...
}
2)
dynamic_cast
<T*>(a)
完成类层次结构中的提升。T必须是一个指针、引用或无类型的指针。a必须是决定一个指针或引用的表达式。
表达式
dynamic_cast
<T*>(a) 将a值转换为类型为T的对象指针。如果类型T不是a的某个基类型,该操作将返回一个空指针。
例子:
class
A { ... };
class
B { ... };
void
f()
{
A* pa =
new
A;
B* pb =
new
B;
void
* pv =
dynamic_cast
<A*>(pa);
// pv 现在指向了一个类型为A的对象
...
pv =
dynamic_cast
<B*>(pb);
// pv 现在指向了一个类型为B的对象
}
3)
const_cast
<T*>(a)
去掉类型中的常量,除了
const
或不稳定的变址数,T和a必须是相同的类型。
表达式
const_cast
<T*>(a)被用于从一个类中去除以下这些属性:
const
,
volatile
, 和 __unaligned。
例子:
class
A { ... };
void
f()
{
const
A *pa =
new
A;
//const对象
A *pb;
//非const对象
//pb = pa; // 这里将出错,不能将const对象指针赋值给非const对象
pb =
const_cast
<A*>(pa);
// 现在OK了
...
}
4)
reinterpret_cast
<T*>(a)
任何指针都可以转换成其它类型的指针,T必须是一个指针、引用、算术类型、指向函数的指针或指向一个类成员的指针。
表达式
reinterpret_cast
<T*>(a)能够用于诸如
char
* 到
int
*,或者One_class* 到 Unrelated_class*等类似这样的转换,因此可能是不安全的。
例子:
class
A { ... };
class
B { ... };
void
f()
{
A* pa =
new
A;
void
* pv =
reinterpret_cast
<A*>(pa);
// pv 现在指向了一个类型为A的对象,这可能是不安全的
...
}
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
c/c++中内存区域划分大总结
四种强制转换类型运算符
剖析C++标准库智能指针(std::auto_ptr) 以及智能指针的原理
C++读取INI文件
va_list、va_start、va_arg、va_end
main参数
转-双线性差值
C++宏的一些副作用
(转)C++位运算
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理
常用链接
我的随笔
我的评论
我参与的随笔
我参与的团队
评论排行榜
1. 约瑟夫环的问题(2)
2. 渲染到纹理(转)(1)
3. VS2010 设置include路径(转)(0)
4. (转)C++位运算(0)
5. C++宏的一些副作用(0)
阅读排行榜
1. VS2010 设置include路径(转)(6768)
2. 旋转:矩阵,四元数和欧拉角向量 (2580)
3. OGRE 1.7.1 CMAKE 编译(2256)
4. 纹理过滤(1470)
5. C++读取INI文件(1360)
posts - 28, comments - 3, trackbacks - 0, articles - 0
Copyright © 小火球