c++ 数据类型转换 static_cast const_cast dymamic_cast reinterret_cast
2009-12-30 21:06
351 查看
* C++提供了四种新的类型强制:
static_cast
const_cast
reinterpret_cast
dynamic_cast
cast 在线翻译的意思是“投射”
reinterpret 在线翻译是“重新解释”
1)staic_cast静态强制;
不能在无关的指针之间进行static类型强制
class CAnimal
{
//...
public:
CAnimal(){}
};
class CGiraffe:public CAnimal
{
//...
public:
CGiraffe(){}
};
int main(void)
{
CAnimal an;
CGiraffe jean;
an = static_cast<CAnimal>(jean);//将对象jean强制成CAnimal类型
return 0;
}
2、const_cast类型强制
const_cast类型强制将一个const变量变成一个非const的等价形式
int main()
{
const int j = 99;
int * k;
k = const_cast<int *>(&j);//解除const
return 0;
}
3、reinterpret_cast运算符
reinterpret_cast运算符用来将一个类型指针转变为另一种类型的指针,也用在将整开型量转为指针,或将指针转为整型量上;
int main()
{
int j = 10;
int * ptr = &j;
char * cptr;
cptr = reinterpret_cast<char *>(ptr);//将int指针类型转变为char的指针类型
return 0;
}
4、dynamic_cast运算符
dynamic_cast的主要目的是:
1)它返回派生类对象的地址;
2)它测试基类指针是否指向下一尖括号<>中所指定类型的对象
dynamic_cast是一个运行时类型信息,dynamic_cast运算符将指向派生对象的基类部分的基类指针转变为指向派生对象的派生类指针,dynamic_cast必须严格地指定与派生对象相同的类,或者它返回NULL指针;
class CAnimal
{
//...
};
class CGiraffe:public CAnimal
{
//...
};
class CGoat:public CAnimal
{
//...
};
int main()
{
CGiraffe gene;
CAnimal * aptr = &gene;
CGiraffe * ptr1,* ptr2;
ptr1 = dynamic_cast<CGiraffe *>(aptr);
ptr2 = dynamic_cast<CGoat *>(aptr); //return NULL
return 0;
}
static_cast
const_cast
reinterpret_cast
dynamic_cast
cast 在线翻译的意思是“投射”
reinterpret 在线翻译是“重新解释”
1)staic_cast静态强制;
不能在无关的指针之间进行static类型强制
class CAnimal
{
//...
public:
CAnimal(){}
};
class CGiraffe:public CAnimal
{
//...
public:
CGiraffe(){}
};
int main(void)
{
CAnimal an;
CGiraffe jean;
an = static_cast<CAnimal>(jean);//将对象jean强制成CAnimal类型
return 0;
}
2、const_cast类型强制
const_cast类型强制将一个const变量变成一个非const的等价形式
int main()
{
const int j = 99;
int * k;
k = const_cast<int *>(&j);//解除const
return 0;
}
3、reinterpret_cast运算符
reinterpret_cast运算符用来将一个类型指针转变为另一种类型的指针,也用在将整开型量转为指针,或将指针转为整型量上;
int main()
{
int j = 10;
int * ptr = &j;
char * cptr;
cptr = reinterpret_cast<char *>(ptr);//将int指针类型转变为char的指针类型
return 0;
}
4、dynamic_cast运算符
dynamic_cast的主要目的是:
1)它返回派生类对象的地址;
2)它测试基类指针是否指向下一尖括号<>中所指定类型的对象
dynamic_cast是一个运行时类型信息,dynamic_cast运算符将指向派生对象的基类部分的基类指针转变为指向派生对象的派生类指针,dynamic_cast必须严格地指定与派生对象相同的类,或者它返回NULL指针;
class CAnimal
{
//...
};
class CGiraffe:public CAnimal
{
//...
};
class CGoat:public CAnimal
{
//...
};
int main()
{
CGiraffe gene;
CAnimal * aptr = &gene;
CGiraffe * ptr1,* ptr2;
ptr1 = dynamic_cast<CGiraffe *>(aptr);
ptr2 = dynamic_cast<CGoat *>(aptr); //return NULL
return 0;
}
相关文章推荐
- c++ 数据类型转换: static_cast dynamic_cast reinterpret_cast const_cast
- C++ 中的类型转换 static_cast reinterpret_cast const_cast
- C++类型强制转换:static_cast const_cast reinterpret_cast dynamic_cast
- 走进C++程序世界-------强制数据类型转换(static_cast、dynamic_cast、reinterpret_cast、const_cast)
- c++ 数据类型转换: static_cast dynamic_cast reinterpret_cast const_cast
- 标准C++的类型转换符:static_cast, const_cast, dynamic_cast, reinterpret_cast
- 标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast(转载)
- Qt 中C++ static_cast 和 reinterpret_cast的区别(static_cast是隐式类型转换,会有数据损失,reinterpret_cast是底层二进制转换,没有数据损失)
- 标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast (1)
- C++中的类型转换static_cast、dynamic_cast、const_cast和reinterpret_cast总结
- 使用标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast
- C++的类型转换运算符(一)——static_cast 与 dynamic_cast
- 【转】标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast 收藏
- C++学习笔记之——显示类型转换(static_cast,const_cast,interpret_cast,dynamic_cast)
- C++的类型转换:static_cast、dynamic_cast、reinterpret_cast和const_cast
- 标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast
- C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast
- C/C++: C++ 中 static_cast 类型转换的含义
- C++的类型转换符:static_cast、dy…
- 【转贴】使用标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast