C++ ——一文读懂:强制类型转换操作符 static_cast

本文详细介绍了C++中的static_cast强制类型转换操作符的使用方法和注意事项,包括类层次结构中基类和子类之间的指针和引用转换,以及数值类型和指针类型之间的转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

static_cast是一个强制类型转换操作符。强制类型转换,也称为显式转换,C++中强制类型转换操作符有四个

  • static_cast
  • dynamic_cast
  • const_cast
  • reinterpert_cast。

介绍static_cast操作符

  1. 用于类层次结构中,基类和子类之间指针和引用的转换;
    当进行上行转换,也就是把子类的指针或引用转换成父类表示,这种转换是安全的;
    当进行下行转换,也就是把父类的指针或引用转换成子类表示,这种转换是不安全的,也需要程序员来保证;
#include <iostream>
using namespace std;


class Base{

    int a;
public:
    void baseMethod(){
        cout << "Base method" << endl;
    };
};

class ChildClass: public Base{
    int b;
public:
    void childMethod(){
        cout << "child method" << endl;
    };
};

int main(){

    /* 上行转换 */
    ChildClass child;
    Base b = static_cast<Base>(child);
    b.baseMethod();
    
    /* 下行转换 */
    Base bb;
    ChildClass cc = static_cast<ChildClass>(bb);
    
}
  1. 编译器隐式执行的任何类型转换都可以由static_cast来完成,比如int与float、double与char、enum与int之间的转换等。
double a = 1.999;
int b = static_cast<double>(a); //相当于a = b 

当编译器隐式执行类型转换时,大多数的编译器都会给出一个警告:

e:\vs 2010 projects\static_cast\static_cast\static_cast.cpp(11): warning C4244: “初始化”: 从“double”转换到“int”,可能丢失数据

把精度大的类型转换为精度小的类型,static_cast使用位截断进行处理。

  1. 把void指针转换成目标类型的指针,是及其不安全的;static_cast不能转换掉expression的const、volatile和__unaligned属性。

    使用static_cast可以找回存放在void*指针中的值。

    double a = 1.999;
    void * vptr = & a;
    double * dptr = static_cast<double*>(vptr);
    cout<<*dptr<<endl;//输出1.999
e-cology前台文件上传漏洞是指在e-cology系统的前台功能中存在漏洞,攻击者可以利用该漏洞上传恶意文件到服务器上。根据引用\[1\]中提到的CNVD-2020-33199漏洞编号,该漏洞可能存在于e-cology9版本的前台文件上传功能中。具体触发点位于文件/global_search.php的第108行,调用了doc2text()函数,并追溯到doc2txt()函数中的$FILE_PATH参数的源代码。该参数连接了附件目录(C:\eoffice9\webroot\ATTACHMENT)的数据表FLE_CONTENT中ATTACHMENT_ID和ATTACHMENT_NAME列的值,以获取完整的文件路径。\[2\] 需要注意的是,根据引用\[3\]中的声明,本文提供的信息仅供网络安全人员参考,未经授权请勿利用文章中的技术资料进行任何入侵操作。同时,禁止将本文提供的工具用于其他目的。 #### 引用[.reference_title] - *1* [e-cology9前台文件上传漏洞复现](https://blog.csdn.net/qq_41490561/article/details/116119845)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [E-Office前台文件上传漏洞](https://blog.csdn.net/u010025272/article/details/131312528)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

令狐少侠、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值