《C++ primer》学习笔记之十五:四个cast
来源:互联网 发布:速食汤 知乎 编辑:程序博客网 时间:2024/06/05 14:09
四个cast的形式:T t = xx_cast<T>(expression)
不要忘了expression要用括号隔开,不向sizeof
const_cast: 去掉const修饰,即用来将指向const对象的指针转为指向普通对象的指针
T t;
T const * const_pt = &t;
T *pt = const_pt; //error
T *pt2 = const_cast<T*>(const_pt); //ok
其它的cast不能去掉const修饰。
static_cast: 将隐式转换显示话。
隐式转换有:standard :int -> double
user-define : 通过类的构造函数、重载conversion编译器可以将一种类型转为另一种类型
这个要求两类型间能够作隐式转换。如果这个不符,则编译通不过。
如:T t;
t = 3; //3 -> T
t = static_cast<T>(3);
这个使程序更清晰,不用也行。
dynamic_cast:将指向类型T的指针(或引用)转为指向类型S的指针(或引用)。
要求两类型都为class,且待转换的类型T为多态类型,即含virtual成员函数,如果不是,则编译通不过;目标类型不必是多态类型。
如果待转换的指针指向的对象是一个目标类型(比如为其子类)的对象,则转换成功;否则转换失败,返回0.
class Base
{
public: ~Base(){}
};
class Derived: public Base {};
Base b;
Base *pb = &b;
Derived *pd = dynamic_case<Derived*>(pb); //待转换的类型为Base *,为多态类型
reinterpret_cast:无理转换。即要求编译器将两种无关联的类型作转换。
char *buf = new char[1024];
T *bt = reinterpret_cast<T*>(buf); //T与char无关联
T *bt = (T*)(buf); //这个是c-style
上面的4种cast都可以用c-style的风格写:T t = (T)(expression);
- 《C++ primer》学习笔记之十五:四个cast
- C Primer Plus学习 十五 菜单输入
- C++ Primer 中文版 学习笔记(十五)
- C++Primer学习笔记之二
- C++Primer学习笔记之三
- C++primer学习笔记之函数
- 《C Primer Plus》学习笔记之 函数
- C++PRIMER学习笔记
- c++primer学习笔记
- c++primer学习笔记
- C++primer学习笔记
- c++primer 学习笔记
- C++Primer 学习笔记
- c++primer学习笔记
- C++Primer学习笔记
- C++PRIMER 学习笔记
- C++Primer学习笔记
- C++Primer学习笔记
- 《C++ primer》学习笔记之十二:const在"="表达式中
- java数据区的一些简单介绍
- 《C++ primer》学习笔记之十三:一段很好看的c++代码,由此得出的编程风格
- 感觉bolg好难用啊!
- 《C++ primer》学习笔记之十四:c-style字符串的长度算‘/0’在内
- 《C++ primer》学习笔记之十五:四个cast
- 《C++ primer》学习笔记之十六: typedef的奇怪的用法
- 《C++ primer》学习笔记之十七:查看vc的c++标准库的结构
- 《C++ primer》学习笔记之十八:vc的常用快捷方式
- 《C++ primer》学习笔记之十九:奇怪的数组引用
- 如何让window服务进程中自动加载MYSQL服务
- 怎样把progressbar 放到 statusbar 中
- 《C++ primer》学习笔记之二十:引用详解1、2、3
- 在ListView列中插入其他组件