C++类型强转

数据类型强转,可以用C风格的强转和C++下的运算符强转。
数据类型强转包括:内置对象和内置对象之间,自定义对象和自定义对象之间,指针(引用)之间,指针与对象之间,对象与指针之间。

经过测试,具体强转规则有:
1).C风格强转:C++把它保留了下来,以利于兼容;可“对应”一切C++运算符强转;有几种情况不能强转:自定义类型对象(无继承关系)之间不能强转;不能将基类对象转换为子类对象)。

2).static_cast: 一般的强转都可以,除了C风格强转不能转的情况之外,还有: 1.不能把没有继承关系的类的指针之间进行转换; 2.不能把对象转换为指针,指针转换为对象。
3).reinterpret_cast: 1.只能用于指针和引用;不能用于对象之间;2.内置类型,(一定情况下)可以把对象转换为指针,指针转换为对象;继承关系类之间不可以;3.任何自定义类型不可以进行从指针到对象,对象到指针的转换。

4).dynamic_cast: 1. 只能用于继承关系的指针和引用 2. 只能将子类型指针转换为基类型指针。
5).const_cast: 1. 只能用于指针和引用 2. 将const指针转化为普通指针(除C风格转换外),只能用const_cast 。

#include <iostream>
using namespace std;

struct sCast1
{
	int a;
	int b;
};

struct sCast2
{
	int a;
	char b;
	char c;
};

class cFather
{
  public:
  int a, b;
};

class cSon:public cFather
{
  public:
  int c;
  char d;
};

//C风格的强转对应所有C++ name_cast<T*>(var)强转。
//1.数字类型和数字类型、指针和指针之间可以相互转换;
//2.内置类型,(一定情况下)可以把对象转换为指针,指针转换为对象;
//3.不能把一个类型(对象)转换成其他任何类型(对象);
//4.但是子类对象可以转换为父类对象。
void test_Cstyle()
{
  char x = 'a';
  int y0 = x;
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值