一、强制类型转换简介
一个命名的强制类型转换具有如下形式:
cast-name<type>(expression)
其中,type是转换的目标类型expression是要转换的值,如果type是引用类型,结果是左值。
cast-name的种类有:static_cast, dynamic_cast, const_cast, reinterpret_cast.
(1)static_cast
任何具有明确定义的类型转换,只要不包括底层const,都可以使用static_cast。当需要把一个较大的算术类型赋值给较小的类型时,使用该强制类型转换,警告就会关闭。
(2)const_cast
const_cast只能改变运算对象的底层const
eg: const char* pc;
char *p = const_cast<char*> pc;
对于将常量对象转换成非常量对象的行为,一般称其为“去掉const性质”
(2)reinterpret_cast
reinterpret_cast通常为运算对象的位模式提供较低层次上的重新解释。
int *ip;
char* pc = reinterpret_cast<char*> ip;
二、与类型相关的运算符
(1)auto
自动转类型
eg
int j;
auto i = j;// i的类型位int
(2)decltype
decltype(expression) value;//value将是expression类型的
eg:
vector<int> it;
decltype(it.begin()) value;//value的类型将是vector<int> ::iterator