C++四种强制类型转换

C++的四种强制类型转换:

static_cast

dynamic_cast

const_cast

reinterpret_cast

下面对这块的知识点进行总结一下。

2.1static_cast

用于对,变量诸如int,char,double,float,之前的值进行相互转换。

float fdata = 3.56;
int m = static_cast<int>(fdata);

如果使用强制类型转换,int m = (int)fdata; 编译器会警告,丢失了精度,使用static_cast,则没有这种警告,表示我们希望强制进行转换。

2.2 dynamic_cast

是针对于类对象的,子类转父类在C++中可以很容易的实现,dynamic_cast 就是用来做父类转子类的

class CollaEntry {
public:
    CollaEntry() {};
    virtual ~CollaEntry() {};
};

class StringEntry :public CollaEntry {
public:
	explicit StringEntry(const char* cstr) :
		strData_(cstr) {};
	explicit StringEntry(const std::string& cstr) :
		strData_(cstr) {};
	~StringEntry() {};

private:
	std::string strData_;
};




int main()
{
	CollaEntry* pcoen = new CollaEntry();

	StringEntry* pstren = dynamic_cast<StringEntry*>(pcoen);

    float fdata = 3.56;
    int m = static_cast<int>(fdata);
    //int m = (int)fdata;
    std::cout << m <<"\n";
}

把父类转换成子类,前提是,你的父类指针动态指向的实例化对象,是包含派生类里面的成员的。

2.3reinterpret_cast

reinterpret_cast 运算符并不会改变括号中运算对象的值,而是对该对象从位模式上进行重新解释

在实战中的使用,比如这种场景,你创建了一个线程,把this传递过去

DWORD PASCAL CMotionDetectionProcessor::MotionDetectionThreadProc(LPVOID pVoid)
{
    // Locals.
    CMotionDetectionProcessor *pThis = NULL;

    pThis = reinterpret_cast<CMotionDetectionProcessor*>(pVoid);

    pThis->RunLiveMotionDetection();

    return 0L;
}

把void指针转换成了对应类的指针。和 int* pin;  char*  pc = (char*)pin;效果是一样的。

2.4const_cast

去除复合类型中const的属性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值