C++ 学习记录 5 --
2017-04-10 09:13
204 查看
构造函数的本意是在创建对象的时候初始化对象,编译器会根据传递的实参来匹配不同的(重载的)构造函数。
static_cast:
int
m =100;long
n =static_cast<long>(m);
const_cast:
#include
<iostream>
usingnamespace std;
int
main(){
constint n
=
100;
int
*p =
const_cast<int*>(&n);
*p
= 234;
cout<<"n = "<<n<<endl;
cout<<"*p = "<<*p<<endl;
return0;
}
reinterpret 是“重新解释”的意思,顾名思义,reinterpret_cast 这种转换仅仅是对二进制位的重新解释,不会借助已有的转换规则对数据进行调整,非常简单粗暴,所以风险很高。
dynamic_cast 用于在类的继承层次之间进行类型转换,它既允许向上转型(Upcasting),也允许向下转型(Downcasting)。向上转型是无条件的,不会进行任何检测,所以都能成功;向下转型的前提必须是安全的,要借助
RTTI 进行检测,所有只有一部分能成功。
static_cast | 用于良性转换,一般不会导致意外发生,风险很低。 |
const_cast | 用于 const 与非 const、volatile 与非 volatile 之间的转换。 |
reinterpret_cast | 高度危险的转换,这种转换仅仅是对二进制位的重新解释,不会借助已有的转换规则对数据进行调整,但是可以实现最灵活的 C++ 类型转换。 |
dynamic_cast | 借助 RTTI,用于类型安全的向下转型(Downcasting)。 |
int
m =100;long
n =static_cast<long>(m);
const_cast:
#include
<iostream>
usingnamespace std;
int
main(){
constint n
=
100;
int
*p =
const_cast<int*>(&n);
*p
= 234;
cout<<"n = "<<n<<endl;
cout<<"*p = "<<*p<<endl;
return0;
}
reinterpret_cast 关键字
reinterpret 是“重新解释”的意思,顾名思义,reinterpret_cast 这种转换仅仅是对二进制位的重新解释,不会借助已有的转换规则对数据进行调整,非常简单粗暴,所以风险很高。
dynamic_cast 关键字
dynamic_cast 用于在类的继承层次之间进行类型转换,它既允许向上转型(Upcasting),也允许向下转型(Downcasting)。向上转型是无条件的,不会进行任何检测,所以都能成功;向下转型的前提必须是安全的,要借助RTTI 进行检测,所有只有一部分能成功。
相关文章推荐
- 记录一个新人的C++之路,以供后来的新人学习
- Effective C++学习记录之Things To Remember
- C#一小时学习记录 有c++基础才行 threadpool 和IIS崩
- C++学习大纲和记录
- C++学习大纲和记录 分类: VC++ 2012-10-13 08:02 135人阅读 评论(0) 收藏
- 记录我在C++学习中的点点滴滴!
- C++ 学习拾遗 —— 点滴记录C++学习过程中遇到的问题以及整理
- C++学习、成长记录(2011-2012第一学期第18周)
- C++学习、成长记录(2011-2012第一学期第17周)
- C++ 学习记录,小技巧
- 记录自己学习C++的点滴,(高手请指点) 偶能承受打击
- 20101231学习记录C++ STL
- 20101230学习记录C++ STL
- C++学习、成长记录(2011-2012第一学期第18周)
- C++ 对象模型学习记录(3)--- 第1章 关于对象(未完)
- 关于c++的学习情况,不再更新了,因为找到了更好的笔记记录工具
- 20101229学习记录C++ STL
- C++ 对象模型学习记录(1)--- 第2章 构造函数语义学
- C++零碎学习记录
- c++学习步骤(记录)