新手,什么是cast语法,求教

discory 2004-10-26 01:45:38
static_cast<type>(var)
什么意思,有什么用,一般什么情况使用,有什么好处
...全文
84 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzheng318 2004-10-26
  • 打赏
  • 举报
回复
学习,帮顶,接分!
lynnboy 2004-10-26
  • 打赏
  • 举报
回复
cast
原意是“分派角色”,在程序语言中是“重新解释或转换对象的类型”。
C++从传统C继承来的Cast语法:

type(ezpr)



(type)value

将值通过内部类型转换操作符函数或程序员写的类型转换操作符函数构造出符合type类型的对象值。
但是,程序员们通过多年的实践总结出,cast的非法使用通常是大量而且非常难于发现的Bug发生的原因。所以,C++标准重新规定了一组语法更加明确的cast运算符:

static_cast<type>(expr)

将值通过类型转换运算符构造新的type值,这是传统cast的通常功能。比如:
int a = 10;
char c = static_cast<char>(a);
static_cast<char>(a)通过char operator char(int);从a产生一个char的临时对象,在赋值给c。

const_cast<type>(expr)

针对对象的const,volatile,mutable属性进行更改。
如果一个对象已有内存分配,则通常仅仅对编译器进行重新解释。
如果一个对象原本是编译时常数值,则需要编译器产生实际的内存分配。比如
const int a = 100; // a=100 是编译时常数
int *p = & const_cast<int>(a); // 导致为a分配存储。

reinterpret_cast<type>(expr)

这个cast运算符将对象的内存内容强制解释为type类型的对象内容。

dynamic_cast<type>(expr)

这个是用于RTTI支持打开时,在继承树中对类指针或引用进行安全cast的运算符。RTTI支持为每个类的继承树构造一个树状的type_info继承表,当进行cast时,就在这个树状结构中寻找,如果找到合法基类或合法派生类的type_info,则cast成功,并返回相应的指针或引用,如果失败,抛出异常
wshcdr 2004-10-26
  • 打赏
  • 举报
回复
还有一个dynamic_cast 在基类指针转化成子类指针时用
goodluckyxl 2004-10-26
  • 打赏
  • 举报
回复
是c++特殊强制转化语法
static_cast<type>对象强制转化
const_cast<>是去掉 加上常量属性
reintepret<type*>对于指针强化
...

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧