怎么用wordpress修改网站源码,荣成建设局网站,wordpress根据用户显示文章,天下信息网C的类型转换运算符#xff1a;static_cast
static_cast 用于在相关类型的指针之间进行转换#xff0c;还可显式地执行标准数据类型的类型转换—这种转换原本将自动或隐式地进行。用于指针时#xff0c; static_cast 实现了基本的编译阶段检查#xff0c;确保指针被转换为相…C的类型转换运算符static_cast
static_cast 用于在相关类型的指针之间进行转换还可显式地执行标准数据类型的类型转换—这种转换原本将自动或隐式地进行。用于指针时 static_cast 实现了基本的编译阶段检查确保指针被转换为相关类型。这改进了 C 风格类型转换在 C 语言中可将指向一个对象的指针转换为完全不相关的类型 而编译器不会报错。 使用 static_cast 可将指针向上转换为基类类型 也可向下转换为派生类型如下面的示例代码所示
Base* objBase new Derived ();
Derived* objDer static_castDerived*(objBase); // ok!
// class Unrelated is not related to Base
Unrelated* notRelated static_castUnrelated*(objBase); // Error
// The cast is not permitted as types are unrelated将 Derived*转换为 Base*被称为向上转换无需使用任何显式类型转换运算符就能进行
这种转换Derived objDerived;
Base* objBase objDerived; // ok!将 Base*转换为 Derived*被称为向下转换如果不使用显式类型转换运算符就无法进
行这种转换Derived objDerived;
Base* objBase objDerived; // Upcast - ok!
Derived* objDer objBase; // Error: Downcast needs
explicit cast然而 static_cast 只验证指针类型是否相关而不会执行任何运行阶段检查。因此程序员可使用 static_cast 编写如下代码而编译器不会报错
Base* objBase new Base();
Derived* objDer static_castDerived*(objBase); // Still no errors!其中 objDer 实际上指向一个不完整的 Derived 对象因为它指向的对象实际上是 Base() 类型。由于 static_cast 只在编译阶段检查转换类型是否相关而不执行运行阶段检查因此 objDer - DerivedFunction() 能够通过编译但在运行阶段可能导致意外结果。
除用于向上转换和向下转换外 static_cast 还可在很多情况下将隐式类型转换为显式类型以引起程序员或代码阅读者的注意
double Pi 3.14159265;
int num static_castint(Pi); // Making an otherwise implicit cast, explicit在上述代码中使用 num Pi 将获得同样的效果但使用 static_cast 可让代码阅读者注意到这里使用了类型转换并指出对知道 static_cast 的人而言编译器根据编译阶段可用的信息进行了必要的调整 以便执行所需的类型转换。 对于使用关键字 explicit 声明的转换运算符和构造函数 要使用它们也必须通过 static_cast。
该文章会更新欢迎大家批评指正。
推荐一个零声学院免费公开课程个人觉得老师讲得不错 分享给大家LinuxNginxZeroMQMySQLRedis fastdfsMongoDBZK流媒体CDNP2PK8SDocker TCP/IP协程DPDK等技术内容点击立即学习: 服务器课程C服务器