C++四种类型转化

2023-11-18

static_cast

该运算符把expression转化为type_name类型,static_cast在编译时使用类型信息执行转换,在转换执行必要时的检测(如指针越界,类型检查),但没有运行时类型检查来保证转换的安全性

  • 用于基本类型检查,如把int转换为char,把int转换为enum
enum WeekType{
   sun=0,Mon=1,Tues=2,Wed=3,Thus=4,Fir=5,Sat=6};

int main()
{
   
	int a = 10;
	char ch = 'x';
	double dx = 12.34;
	a = static_cast<int>(ch);
	a = static_cast<int>(dx);
	WeekType x = Mon;
	a = x;
	x = static_cast<WeekType>(a);
}
  • 指针转换的限制
    在这里插入图片描述
  • 可以就void*转换为其它类型
int main()
{
   
	int a = 10;
	int* ip = nullptr;
	double* dp = nullptr;
	void* vp = &a;
	ip = static_cast<int*>(vp);
	dp = static_cast<double*>(dp);
	return 0;
}
  • 弃值表达式
int main()
{
   
	int a = 10, b = 20;
	static_cast<void>(a + b);
}

  • 左值到右值
    1.先补充一个小知识点,移动语义
class PtrInt
{
   
private:
	int* pval; // new .heap ; stack . data;
public:
	PtrInt(int* p = nullptr) :pval(p)
	{
   
		cout << "create Ptrint:" << this << endl;
	}
	~PtrInt()
	{
   
		delete pval;
		pval = nullptr;
		cout << "Destory Ptrin:t" << this << endl;
	}
	PtrInt(const PtrInt& it) :pval(new int(0)) //拷贝构造函数
	{
   
		*pval = *it.pval;
		//*pval = it.*pval;
	}
	PtrInt& operator=(const PtrInt& it) //拷贝赋值函数
	{
   
		if (this != &it)
		{
   
			delete pval;
			pval = new int(*it.pval);
			//pval = it.pval;
		}
		cout << "Copy create Ptrint:" << this << endl;
		return *this;
	}
	PtrInt(PtrInt&& it) :pval(it.pval) //移动构造函数
	{
   
		it.pval = nullptr;
		cout << "move copy create Ptrint:" << this << endl;
	}
	PtrInt& operator=(PtrInt&& it) //移动赋值函数
	{
   
		if (this != &it)
		{
   
			delete[]pval;
			pval = it.pval;
			it.pval = nullptr;
		}
		cout << "Copy operator Ptrint:" << this << endl;
		return *this;
	}
};

PtrInt func(int x)
{
   
	PtrInt tmp(new int(x));
	return tmp;
}

int main()
{
   
	PtrInt a(new int(10));
	a = func(100);
	return 0;
}

在这里插入图片描述
运行结果:
在这里插入图片描述
2.左值与右值之间的转换

#include<iostream>
using namespace std;
class PtrInt
{
   
private:
 int</
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++四种类型转化 的相关文章

随机推荐

  • python 3.2 错误 ‘generator’ object has no attribute ‘next’

    下面是一段简单的示例 定义Generator函数 def func n for i in range n yield i 在for循环中输出 for i in func 3 print i 使用next 输出 r func 4 print
  • mysql数据存储文件结构图

    1 基本结构图 2 文件说明 数据库文件夹 每一个数据库都会建立一个单独的文件夹
  • 全同态加密(FHE)体系概述(初学版)

    同态加密定义 假设有这样一个场景 用户有一组私密数据 被加密存储在了第三方的云平台 现在 该用户想对这组数据进行某种处理 但是处理过程和结果都不想让第三方云平台看到 当然 用户可以选择将数据下载下来 处理后再加密上传 但是 假如这一组数据量
  • 一种全自动的牙齿CBCT三维个体识别和分割方法

    点击上方 小白学视觉 选择加 星标 或 置顶 重磅干货 第一时间送达 小白导读 论文是学术研究的精华和未来发展的明灯 小白决心每天为大家带来经典或者最新论文的解读和分享 旨在帮助各位读者快速了解论文内容 个人能力有限 理解难免出现偏差 建议
  • python安装numpy+mkl 和 scipy库失败的原因

    1 使用系统自带的pip install scipy 安装scipy库时 出现了这样的错误 之所以会出现这样的错误 主要是因为安装系统自带的numpy库时 是numpy而不是numpy mkl库 所以导致Scipy安装失败 scipy依赖于
  • Windows映像劫持调试程序

    简介 映像劫持 也被称为 IFEO Image File Execution Options 在Windows NT架构的系统里 IFEO的本意是为一些在默认系统环境中运行时可能引发错误的程序执行体提供特殊的环境设定 当一个可执行程序位于I
  • uln2003步进电机驱动程序

    ULN2003是一种常见的步进电机驱动芯片 可用于驱动4相 5线和6线步进电机 其驱动方式是通过输入高低电平来控制电机旋转的步进角度 以下是一般的ULN2003步进电机驱动程序框架 定义引脚 定义控制步进电机的引脚 包括4个输入引脚和4个输
  • Gutenberg 块编辑器 11.9 专注于导航菜单和块主题

    Gutenberg 11 9块编辑器于11月初发布 其中包含数十项增强功能 贡献者正在加速前进 在预计 12 月 14 日发布 WordPress 5 9 之前获得一些最终功能 11 9 版是最后一个包含即将到来的 WordPress 更新
  • chrome net::ERR_CERT_AUTHORITY_INVALID 问题

    浏览器输入 chrome net internals hsts 输入框输入你不需要安全检查的 域名 ok
  • centos7安装图形界面

    Centos7 安装图形界面 第一步 确认yum可用 1 1 判断yum是否可用 输入 yum list 如果出现以下信息 则代表不可用 1 2 更改配置 vi etc sysconfig network scripts ifcfg ens
  • Apache 之执行 CGI 脚本(Python 实现)

    目录 前言 1 查看并挑选 Python 版本 2 用 Python 实现一个简单的 CGI 脚本 3 查看 CGI 环境变量 总结 前言 本文记录了一个搭建 CGI 环境的示例 前文推荐 Apache 2 4 54 x64 安装及配置 系
  • 四、webpack的基本使用,处理字体文件,CSV,XML文件(Mhua)

    字体文件 webpack 处理字体文件配置 module rules test woff woff2 eot ttf otf asset resource 可以帮助我们载入任何类型的资源 type asset resource 加载数据 如
  • 快速玩转 Llama2!机器学习 PAI 最佳实践(二)—全参数微调训练

    前言 近期 Meta 宣布大语言模型 Llama2 开源 包含7B 13B 70B不同尺寸 分别对应70亿 130亿 700亿参数量 并在每个规格下都有专门适配对话场景的优化模型Llama 2 Chat Llama2 可免费用于研究场景和商
  • 剑指offer(16)——C++实现两个链表合并

    题目 输入两个单调递增的链表 输出两个链表合成后的链表 当然我们需要合成后的链表满足单调不减规则 考察点 链表 解题思路 递归实现 比较每个节点大小 将较小的放入新链表 非递归 原理同上 完整代码 16 合并两个链表 include
  • python 使用list.append()后前面的数据被后面的数据覆盖-解决办法

    list 创建字典 dictionary 获取字典key值list 第一行 keylist table row values 0 0 ncols 将excel数据放到字典中 for rownum in range 1 nrows for c
  • Java 8之Consumer接口方法应用

    一 简介 Java Consumer接口来自Java 8中引入的 java util function包 Consumer是一个功能接口 用来作为lambda表达式或方法引用的任务目标 传递一个参数执行指定的方法 Consumer的功能接口
  • java使用FFmpeg获取rtmp流的一帧作为封面图

    背景后台 Spring boot 获取rtmp流地址后返回前端 Angular2 Ckplay插件上播放 由于需要展示多个暂停的媒体窗口封面 前端抓取封面较为困难 后台处理图片返回 于此收录本文以便日后再用 安装好的FFmpeg rtmp测
  • 联想Win10安装Ubuntu双系统教程

    前言 最近为了更好的做一名程序员 猿 所以准备装一个双系统 也就是Ubuntu系统 网上坑太多 所以决定自己写一点操作步骤 首先看一下我的计算机配置 联想小新700 Tip 这里的安装步骤仅仅针对联想Win10改型号或者相关型号 其他品牌型
  • 调试代码

    1 用浏览器打开需要调试的页面 2 打开调试模式 在谷歌浏览器中 点击F12 可以打开开发者模式 刷新页面就可以看到数据的传输 也可以通过鼠标右键 选择 重新加载框架 可以查到某个部分的刷新 找到调用的接口 通过该接口去原程序中找到对应的方
  • C++四种类型转化

    文章目录 static cast const cast reinterpret cast 重新解释 dynamic cast static cast 该运算符把expression转化为type name类型 static cast在编译时