对 C++ 中的强制转换运算符几乎没有疑问

2023-12-31

The reinterpret_cast正如我们所知,可以将任何指针类型转换为任何其他指针类型。关于这个强制转换运算符我想问的问题是:

  1. 如何reinterpret_cast工作,允许reinterpret_cast工作的魔法(内部实现)是什么?
  2. 使用时如何保证安全reinterpret_cast?据我所知,它并不能保证安全铸造,那么使用时需要注意什么reinterpret_cast?
  3. 这个运算符的实际用途是什么?在我的专业编程经验中,我还没有真正遇到过它,如果不使用这个运算符,我就无法绕过它。除了通常的 int* 到 char* 之外的任何实际示例都将非常有帮助和赞赏。

关于一般铸造操作员的另一个问题:
铸造操作员(static_cast, dynamic_cast, const_cast, reinterpret_cast) 都被称为Operators据我所知,这样的说法是否正确casting operators cannot be overloaded unlike most other operators(我知道并非所有操作符都可以重载,我也知道哪些操作符不能重载(除了我要问的问题,请不要对此发火)只是我有这样的疑问,既然他们是操作符,那么标准是怎么说的关于这些?


  1. 没有魔法。reinterpret_cast通常只是意味着(至少尝试)将您在该地址找到的内容视为我指定的类型。该标准对其用途的定义还不够多,因此它could与此不同,但很少(如果有的话)确实如此。
  2. 在某些情况下,您可以从受歧视的工会等组织中获得安全感。例如,如果您正在读取网络数据包,并且读得足够多,可以看到您收到的是 TCP 数据包,那么您可以(相当)安全地执行reinterpret_cast from IPHdr to TCPHdr(或者您碰巧使用过的任何名称)。不过,编译器不会(通常)做太多事情——任何安全性都取决于您来实现和强制执行。
  3. 我使用了 2) 中描述的代码来处理不同类型的网络数据包。

对于你的最后一个问题:你可以重载一个类的转换:

class XXX { 
public:
    operator YYY() { return whatever; }
};

不过,这通常可用于一般转换——无论是通过 static_cast、C 风格转换还是隐式转换来完成。 C++0x 允许您添加explicit限定符,因此它不会用于隐式转换,但仍然无法区分 static_cast 和 C 风格的强制转换。

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

对 C++ 中的强制转换运算符几乎没有疑问 的相关文章

  • 使用 DirectCast、CType、TryCast 转换数据类型

    自从我在 2005 年从 VB6 迁移到 VB NET 以来 我一直在使用 CType 将一种数据类型转换为另一种数据类型 我这样做是因为它打字速度更快 以前存在于 VB6 中 而且我不知道为什么我必须使用 DirectCast 如果它们之
  • C#.Net 邮件将进入垃圾邮件文件夹

    我正在从 ASP net Web 应用程序发送电子邮件 邮件发送成功 没有失败 但大多数都进入了垃圾邮件文件夹 请帮助我克服垃圾邮件过滤器 我的发送邮件代码 public void SendMail string FromAddress s
  • 如何使用 openSSL 函数验证 PEM 证书的密钥长度

    如何验证以这种方式生成的 PEM 证书的密钥长度 openssl genrsa des3 out server key 1024 openssl req new key server key out server csr cp server
  • 在 C 语言中,为什么数组的地址等于它的值?

    在下面的代码中 指针值和指针地址与预期不同 但数组值和地址则不然 怎么会这样 Output my array 0022FF00 my array 0022FF00 pointer to array 0022FF00 pointer to a
  • Boost ASIO 串行写入十六进制值

    我正在使用 ubuntu 通过串行端口与设备进行通信 所有消息都必须是十六进制值 我已经在 Windows 环境中使用白蚁测试了通信设置 并得到了我期望的响应 但在使用 Boost asio 时我无法得到任何响应 以下是我设置串口的方法 b
  • 如何修复错误:“检测到无法访问的代码”

    我有以下代码 private string GetAnswer private int CountLeapYears DateTime startDate return count String answer GetAnswer Respo
  • 防止控制台应用程序中的内存工作集最小化?

    我想防止控制台应用程序中的内存工作集最小化 在Windows应用程序中 我可以这样做覆盖 SC MINIMIZE 消息 http support microsoft com kb 293215 en us fr 1 但是 如何在控制台应用程
  • 混合模型优先和代码优先

    我们使用模型优先方法创建了一个 Web 应用程序 一名新开发人员进入该项目 并使用代码优先方法 使用数据库文件 创建了一个新的自定义模型 这 这是代码第一个数据库上下文 namespace WVITDB DAL public class D
  • 如何向 Mono.ZeroConf 注册服务?

    我正在尝试测试 ZeroConf 示例http www mono project com Mono Zeroconf http www mono project com Mono Zeroconf 我正在运行 OpenSuse 11 和 M
  • 用于在标头更改时重新编译的简单 C 项目的示例 makefile

    有谁有完整的 makefile 可以执行以下操作 如果 HEADER 文件发生更改 则重建项目 cpp 文件在 makefile 中列出 头文件未在 makefile 中列出 头文件允许与 cpp 文件具有不同的名称 部分cpp文件没有头文
  • C# 根据当前日期传递日期时间值

    我正在尝试根据 sql server 中的两个日期获取记录 Select from table where CreatedDate between StartDate and EndDate我通过了5 12 2010 and 5 12 20
  • 条件类型定义

    如果我有一小段这样的代码 template
  • 在 azure blob 存储中就地创建 zip 文件

    我将文件存储在 Blob 存储帐户内的一个容器中 我需要在第二个容器中创建一个 zip 文件 其中包含第一个容器中的文件 我有一个使用辅助角色和 DotNetZip 工作的解决方案 但由于 zip 文件的大小最终可能达到 1GB 我担心在进
  • Unity3D - 将 UI 对象移动到屏幕中心,同时保持其父子关系

    我有一个 UI 图像 它的父级是 RectTransform 容器 该容器的父级是 UI 面板 而 UI 面板的父级是 Canvas 我希望能够将此 UI 图像移动到屏幕中心 即画布 同时保留父级层次结构 我的目标是将 UI 图像从中心动画
  • 调用 .ToArray() 时出现 ArgumentException

    我有一个经常被清除的列表 代码完全是这样的 VisitorAgent toPersist List
  • 如何在C#中控制datagridview光标移动

    我希望 datagridview 光标向右移动到下一列 而不是在向单元格输入数据后移动到下一行 我试图通过 dataGridView1 KeyDown 事件捕获键来控制光标 但这并不能阻止光标在将数据输入到单元格后移动到下一行 提前感谢你的
  • 构建 C# MVC 5 站点时项目之间的处理器架构不匹配

    我收到的错误如下 2017 年 4 月 20 日构建 13 23 38 C Windows Microsoft NET Framework v4 0 30319 Microsoft Common targets 1605 5 警告 MSB3
  • 如何获取带有某个属性注释的所有属性?

    我刚刚从 Roslyn 开始 我想找到所有用属性名称 OneToOne 注释的属性 我启动了 SyntaxVisualizer 并能够获取对该节点的引用 但我想知道是否有更简单的方法来实现此目的 这就是我所拥有的 var prop docu
  • Streamwriter 覆盖 txt 文件中的文本

    有没有什么方法可以重新打开流写入器而不创建新的写入对象 因为此时 当调用 WriteOdd 时 streamwriter 正在覆盖在它之前调用的 WriteEven public void WriteEven StreamWriter wr
  • 从后面的代码添加外部 css 文件

    我有一个 CSS 文件 例如 SomeStyle css 我是否可以将此样式表文档从其代码隐藏应用到 aspx 页面 您可以将文字控件添加到标头控件中 Page Header Controls Add new System Web UI L

随机推荐

  • 如何用图像的像素创建图表?

    现在 我有一个图像 我想生成一个加权图 G V E 其中 V 是顶点集 E 是边集 图像中的每个像素作为图中的节点 但我不知道该怎么做 有人可以帮助我吗 最好是蟒蛇 非常感谢 问题补充 很抱歉我对问题的描述不够清楚 我的目标是使用图像的像素
  • 以编程方式设置 Jetty 配置以增加允许的 URL 长度

    我们使用嵌入式 Jetty 9 3 1 v20150714 并遇到了problem https stackoverflow com q 19549163 421049其中我们的长查询 URL 与其他标头相结合 比允许的长度要长 The so
  • 如何获取/设置 Firebase Cloud Functions v1 环境变量

    我以旧方式使用 Cloud Functions 包中的环境变量functions config 命令 但由于我更新到 v1 0 2 即使通过JSON parse process env FIREBASE CONFIG 就像文档告诉我的那样
  • 从机上的 Jenkins 工作空间路径不一致

    我们设置了一些共享工作空间的工作 各个分支的工作流程是 构建一个名为的大型 C 项目foo 执行多个下游测试 每个测试都使用foo 我们通过分配Use custom workspace构建工作区的下游作业领域 最近 我们选择了一个分支 并将
  • 在 iPhone X 上的 ARKit ARSession 期间从前置摄像头录制视频

    我正在使用一个ARSession结合一个ARFaceTrackingConfiguration来追踪我的脸 同时 我想从 iPhone X 的前置摄像头录制视频 为此 我使用AVCaptureSession但当我开始录音时ARSession
  • MongoDB 复合键

    我刚刚开始使用 MongoDb 我注意到我得到了很多重复的条目记录 而我本打算是唯一的 我想知道如何对我的数据使用复合键 并且我正在寻找有关如何创建它们的信息 最后 我使用 Java 来访问 mongo 和 morphia 作为我的 ORM
  • $(document).ready() 未针对 ajax 加载的内容执行

    在返回的部分页面中不执行 document ready 的原因可能是什么 两次工作正常 但第三次更新 html 后没有任何反应 alert html alert PopUpItem PopUpItem html html alert in
  • 在 Woocommerce 结帐中为特定选定的运输选项添加正文类别

    如果访问者在 Woocommerce 结账页面上处于特定的送货选项中 我会尝试向页面正文添加一个类 我已经完成了以下操作 但它没有添加课程 有人可以帮忙吗 add filter body class bbloomer wc product
  • 在使用 Transform 旋转时调整 UIView 的大小

    When my UIView使用变换属性旋转 CGAffineTransformMakeRotation 我需要拖动它的一个角 例如右下角 来调整它的大小 在此过程中 当用户拖动角时 视图的角必须跟随用户的手指 并通过增加 2 个边 右下角
  • 什么时候只需要 PartialEq 而不需要 Eq 比较合适?

    我在读铁锈书 https doc rust lang org book appendix 03 derivable traits html并尝试了解用例PartialEq and Eq特征 我意识到PartialEq适用于不一定是自反的关系
  • 动态代理和检查异常

    如何让我的动态代理抛出已检查的异常 我需要一个透明的接口包装器 它有时会抛出已检查的异常 例如IOException 没有第 3 方 AOP 或编写我自己的代理是否可以 手动修改接口的所有 20 个方法也不是一个选择 正如康拉德上面提到的
  • 进入设置屏幕

    我想从我的应用程序中打开 设置 gt 声音和显示 gt 电话铃声 屏幕 我怎样才能做到这一点 根据您的需要 有几种选择可以从您的应用程序中调出 铃声 设置屏幕 如果您想调出通常可通过系统设置访问的实际首选项屏幕 让用户通过应用程序修改手机的
  • 文件上传“multipart/form”异常 org.apache.commons.fileupload.FileUploadBase$InvalidContentTypeException

    我尝试使用 Apache Commons 进行文件上传 但抛出以下异常 org apache commons fileupload FileUploadBase InvalidContentTypeException 请求不包含 multi
  • Dropwizard 中的自定义 Jetty 过滤器

    我正在尝试在 Dropwizard 实例中添加自定义标头过滤器 以检查请求的版本是否与 Dropwizard 实例的版本同步 我看到你可以使用FilterBuilder添加码头CrossOriginFilters 但是 我无法弄清楚如何设置
  • 片段 popbackstack 行为在 25.1.0 和 25.1.1 中被破坏

    自从支持版本 25 1 0 和最新的 25 1 1 以来 我在片段替换 添加方面遇到了奇怪的行为 25 1 0 已报告问题Android fragmentTransaction replace 不适用于支持库 25 1 0 https st
  • Huggingface Transformer 问题答案置信度得分

    我们如何从huggingface转换器问题答案的示例代码中获取答案置信度得分 我看到管道确实返回了分数 但是下面的核心也可以返回置信度分数吗 from transformers import AutoTokenizer TFAutoMode
  • 当每个对象可以分为多个组时如何对对象进行分组?

    我有一个List
  • 如何在 JINT Javascript 端创建计时器

    我正在使用 JINT 开发一个 C 项目 https github com sebastienros jint https github com sebastienros jint 我需要在我的 JS 上创建一个计时器 以便每次计时器 ti
  • VSCode 在 Windows 上将调试 shell 更改为 bash

    Context 我最近从 Sublime Text 切换到 Visual Studio Code 来测试 Microsoft 文本编辑器的调试功能 这里的主要问题是我的 Ruby on Rails 环境是在 Windows 上的 Ubunt
  • 对 C++ 中的强制转换运算符几乎没有疑问

    The reinterpret cast正如我们所知 可以将任何指针类型转换为任何其他指针类型 关于这个强制转换运算符我想问的问题是 如何reinterpret cast工作 允许reinterpret cast工作的魔法 内部实现 是什么