C++11/14/17标准

本文介绍了C++11/14/17标准中的四种类型转换操作符:static_cast、const_cast、dynamic_cast和reinterpret_cast的用法。同时讲解了去除转移字符、decltype类型推导及其实际应用,以及返回值类型后置的语法。这些新特性简化了代码并提高了类型安全性。
摘要由CSDN通过智能技术生成

C++11/14/17标准

一、强制转换

C风格的强制类型转换很简单,均用 Type b = (Type)a 形式转换。但是C风格的类型转换有不少的缺点:万物皆可转,不容易区分;不容易查找代码。

因此C++给我们提供了4种类型转换操作符来应对不同场合。

类型转换操作符 作用
static_cast 静态类型转换(在编译期),编译器做类型检查,基本类型能转换,指针不能
reinterpret_cast 重新解释类型
const_cast 去const属性
dynamic_cast 动态类型转换(运行时),运行时检查类型安全(转换失败返回nullptr)如子类和父类之间的多态类型转换(区分对象)

1、staitc_cast 类似C风格的强制转换,进行无条件转换,静态类型转换

在这里插入图片描述

  • 基本数据类型转换,enum,struct,int,char,float等。static_cast不能进行无关类型(如非基类和子类)指针之间的转换。

  • 不能用于两个不相关类型的转换,如int和int*之间的转换,虽然二者都是四个字节,但他们一个表示数据,一个表示地址,类型不相关,无法进行转换。

在这里插入图片描述

  • 可以用于void*和其他指针类型之间的转换(但是不能用于非void指针之间的转换)
    若要指针转换可以用reinterpret_cast
    在这里插入图片描述在这里插入图片描述
    代码

int main()
{
   
	int a = 66;
	char p = static_cast<char>(a);
	cout << p << endl;
	
	int* p;
    //message: 与指向的类型无关;
	//强制转换要求 reinterpret_cast、C 样式强制转换或函数样式强制转换
	//char* c = static_cast<char*>(p);
	
	int a = 9;
	int* p=&a;	
	//void* c = static_cast<void*>(p);
	//指针只能由void*到其他指针,或者其他指针到Void*
	char* x = static_cast<char*>(c);

	//int* pa = nullptr;
	//int i = static_cast<int>(pa);	
	//error“static_cast”: 无法从“int *”转换为“int”

	while (1);
	return 0;

}

2、reinterpret_cast转换的类型必须是一个指针

  • 不同类型指针之间的转换
  • int转为指针,指针转为int

在这里插入图片描述

3、const_cast 可以去掉常量的const属性

虽然可以去除常属性,但是还是改变不了本身
<>内是引用

在这里插入图片描述

const int a = 19;
	int b = const_cast<int
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值