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++四种类型转化 的相关文章

  • 结构化绑定中缺少类型信息

    我刚刚了解了 C 中的结构化绑定 但有一件事我不喜欢 auto x y some func is that auto正在隐藏类型x and y 我得抬头看看some func的声明来了解类型x and y 或者 我可以写 T1 x T2 y
  • 如何将 std::string& 转换为 C# 引用字符串

    我正在尝试将 C 函数转换为std string参考C 我的 API 如下所示 void GetStringDemo std string str 理想情况下 我希望在 C 中看到类似的东西 void GetStringDemoWrap r
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 通过引用传递 [C++]、[Qt]

    我写了这样的东西 class Storage public Storage QString key const int value const void add item QString int private QMap
  • 随着时间的推移,添加到 List 变得非常慢

    我正在解析一个大约有 1000 行的 html 表 我从一个字符串中添加 10 个字符串 td 每行到一个list td
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐

  • 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在编译时