static

static,第1张

前言

语法 :static_cast< 想要的类型> (原数据), 是C++中的关键字
-------在C++中,我们经常用到 隐式的类型 转换,比如 char->int , int ->double, 类层次结构中基类 和 派生类之间指针或引用的转换。
-------编译器隐式执行的任何类型转换都可以由 static_cast显式完成。
-------需要注意的是, 我们要 确保 目标数据类型 是 我们想要的类型,因为static_cast 不做 运行时的类型检查(RTTI,Run-time type identification)。
------- 相当于 C 语言的强制类型转换,后面会讨论 其差别。
------ 不能更改数据 const , static 等属性。

1. 基本数据类型转换
    double d = 1.2;
    int i= static_cast<int> (d); // = C语言的 (int)d;
    cout << i << endl;


2. 类层次结构中基类和派生类 之间指针或引用的转换。

  1. 进行上行转换(把派生类的指针或引用转换成基类表示)是安全的;
  2. 进行下行转换(把基类指针或引用转换成派生类表示)时,由于没有动态类型检查,所以是不安全的因为可能派生类定义了 基类中 没有的成员变量。
class A
{
};
class B:public A
{
};
class C:public A
{
};
class D
{
};
A objA;
B objB;
A* pObjA = new A();
B* pObjB = new B();
C* pObjC = new C();
D* pObjD = new D();
 
objA = static_cast<A&>(objB);     //转换为基类引用    
objA = static_cast<A>(objB);
objB = static_cast<B>(objA);      //error 不能进行转换  
 
pObjA = pObjB;                    //right 基类指针指向子类对象
//objB = objA;                      //error 子类指针指向基类对象
pObjA = static_cast<A*>(pObjB);   //right 基类指针指向子类
pObjB = static_cast<B*>(pObjA);   //强制转换 OK 基类到子类
//pObjC = static_cast(pObjB);   //error 继承于统一类的派生指针之间转换 
//pObjD = static_cast(pObjC);   //error 两个无关联之间转换
用法 总结

------static_cast常用来进行基本类型直接的转换,如char与int、int与float、enum与int之间;

-------static_cast也可以转换用户自定义类型,但目标类型必须含有相应的构造函数;

------static_cast还可以转换对象的指针类型,但它不进行运行时类型检查,所以是不安全的;

------static_cast甚至可以把任何表达式都转换成void类型;

------satic_cast不能移除变量的const属性,请参考const_cast *** 作符;

------static_cast进行的是简单粗暴的转换,所以其正确性完全由程序员自己保证。

static_cast 和 C 语言 强制转换的差别
  1. static_cast 会做 编译时的类型检查,而 强制转换不会。
    实例: 两个不相关的类:A,B
  2. static_cast 想要表达的更为确切,方便管理。

参考文章

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/915168.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存