关于C++中的类型转换
2016-06-30 11:21
387 查看
C++中定义了四种类型转换操作符:static_cast、const_cast、dynamic_cast和reinterpret_cast。
static_cast的用法类似于C语言中的强制类型转换,它可以将一种类型转换为另一种类型:
const_cast用于去除变量的常量属性,将一个const变量转变为非const变量:
dynamic_cast则用于“将指向base class objects的pointers或references转型为指向derived class objects的pointers或references,并得知转型是否成功。”如果转型失败,会以一个null指针(当转型对象是指针)或一个exception(当转型对象是reference)表现出来。
reinterpret_cast操作符的转换结果与编译平台息息相关,该操作符不具备移植性。它可以用来转换指针类型:
由于该操作符不具备移植性,某些情况下这样的转型可能会导致不正确的结果,因此不到万不得已,应该尽量避免函数指针转型。
static_cast的用法类似于C语言中的强制类型转换,它可以将一种类型转换为另一种类型:
double n; int a=static_cast<int>(n);
const_cast用于去除变量的常量属性,将一个const变量转变为非const变量:
const int a=0; int b=const_cast<int>(a);
dynamic_cast则用于“将指向base class objects的pointers或references转型为指向derived class objects的pointers或references,并得知转型是否成功。”如果转型失败,会以一个null指针(当转型对象是指针)或一个exception(当转型对象是reference)表现出来。
Widget *pw; update(dynamic_cast<SpecialWidget*>(pw)); void updateViaRef(SpecialWidget& rsw); updateViaRef(dynamic_cast<SpecialWidget&>(*pw));
reinterpret_cast操作符的转换结果与编译平台息息相关,该操作符不具备移植性。它可以用来转换指针类型:
typedef void (*myFun)(int); void fun1(int a) { std::cout<<a<<std::endl; } int fun2(int a,int c) { std::cout<<c<<std::endl; return a; } int main() { void(*fun)(int); fun=reinterpret_cast<myFun>(fun2); fun(5); system("pause"); return 0; }
由于该操作符不具备移植性,某些情况下这样的转型可能会导致不正确的结果,因此不到万不得已,应该尽量避免函数指针转型。
相关文章推荐
- c++ 回调类成员函数实现
- 优先队列(堆)
- *leetcode #162 in cpp
- C++中map的一点疑惑...
- c++继承中拷贝构造问题
- C++虚函数与纯虚函数
- Function Table 函数指针表
- debug c++ 经验积累(1)-double free or corruption (!prev)
- leetcode 3sum算法
- 函数指针参数的传递问题
- C++ 在继承中虚函数、纯虚函数、普通函数,三者的区别
- C语言中生产随机数 rand()函数
- C++ 11 Lambda表达式
- leetcode #160 in cpp
- C++中数字与字符串之间的转换
- c++内存对齐原理
- VC++发展与其对应的MFC版本
- C++ 类的继承四(类继承中的重名成员)
- 值得推荐的C/C++框架和库
- C++ 11 nullptr关键字