C++类型转换
2013-11-19 08:20
169 查看
C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用。
const_cast,字面上理解就是去const属性。
static_cast,命名上理解是静态类型转换。如int转换成char。
dynamic_cast,命名上理解是动态类型转换。如子类和父类之间的多态类型转换。
reinterpret_cast,仅仅重新解释类型,但没有进行二进制的转换。
static_cast数值类型之间,有一方是void*的指针类型之间
const_cast用于临时去掉const、volatile限制
reinterpret_cast任意两种指针类型之间,指针于数值类型之间
reinterpret_cast:仅仅重新解释类型,但没有进行二进制的转换:
#include <iostream>
using namespace std;
#include <cstdlib>
int main()
{
int n = static_cast<int>(45.67);
int* p = static_cast<int*>(calloc(sizeof(int),10));
free(p);
const int k = n;
cout << "k=" << k << endl;
const_cast<int&>(k) = 789;
cout << "k=" << k << endl;
float f=123.45;
p = reinterpret_cast<int*>(&f);
cout << *p << endl;
n = int(12.34);
cout << "n=" << n << endl;
n = int();
cout << "n=" << n << endl;
int m(100);
cout << "m=" << m << endl;
int x();//函数声明
int(y)=200;//尽量不用,容易跟强制类型转换混淆
cout << "y=" << y << endl;
}
去const属性用const_cast。
基本类型转换用static_cast。
多态类之间的类型转换用daynamic_cast。
不同类型的指针类型转换用reinterpret_cast。
const_cast,字面上理解就是去const属性。
static_cast,命名上理解是静态类型转换。如int转换成char。
dynamic_cast,命名上理解是动态类型转换。如子类和父类之间的多态类型转换。
reinterpret_cast,仅仅重新解释类型,但没有进行二进制的转换。
static_cast数值类型之间,有一方是void*的指针类型之间
const_cast用于临时去掉const、volatile限制
reinterpret_cast任意两种指针类型之间,指针于数值类型之间
reinterpret_cast:仅仅重新解释类型,但没有进行二进制的转换:
#include <iostream>
using namespace std;
#include <cstdlib>
int main()
{
int n = static_cast<int>(45.67);
int* p = static_cast<int*>(calloc(sizeof(int),10));
free(p);
const int k = n;
cout << "k=" << k << endl;
const_cast<int&>(k) = 789;
cout << "k=" << k << endl;
float f=123.45;
p = reinterpret_cast<int*>(&f);
cout << *p << endl;
n = int(12.34);
cout << "n=" << n << endl;
n = int();
cout << "n=" << n << endl;
int m(100);
cout << "m=" << m << endl;
int x();//函数声明
int(y)=200;//尽量不用,容易跟强制类型转换混淆
cout << "y=" << y << endl;
}
去const属性用const_cast。
基本类型转换用static_cast。
多态类之间的类型转换用daynamic_cast。
不同类型的指针类型转换用reinterpret_cast。
相关文章推荐
- 标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast(转载)
- c/c++各种字符、字符串类型转换
- C++ 类型转换
- c++有哪四个类型转换相关的关键字
- C++中的类型转换的思考
- C++函数重载过程中的二义性和类型转换
- C/C++基础知识:数组类型、函数类型到左值和右值的转换
- C++隐性类型转换
- c++ 由类型转换引起的指针偏移
- more effective c++ 第一章读书笔记: 指针,引用,c++类型转换,多态数组,默认构造函数
- C++类型转换
- C++类型转换整理
- C++托管与C#中的数据类型转换
- 【C++类型转换】static_cast, dynamic_cast, const_cast探讨
- c++类型转换
- C++ 类型转换操作符(Type Conversion Operators)
- C++继承与友元、继承与类型转换
- C++多重继承下的指针类型转换
- C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast
- C++类型转换操作符---补充(8)《Effective C++》