当将 void* 转换为任何内容时,我应该使用 static_cast 还是 reinterpret_cast

2024-04-26

Both static_cast and reinterpret_cast似乎适合铸造void*到另一个指针类型。是否有充分的理由偏爱其中之一?


Use static_cast:这是最精确的转换,准确地描述了此处进行的转换。

有一个误解,认为使用reinterpret_cast会是更好的匹配,因为它意味着“完全忽略类型安全,只是从 A 转换到 B”。

然而,这实际上并没有描述reinterpret_cast。相当,reinterpret_cast有多种含义,所有这些含义都表明“由reinterpret_cast是实现定义的。” [5.2.10.3]

但在铸造的特殊情况下void* to T*标准完全定义了映射;即,将类型分配给无类型指针而不更改其地址。

这是一个更喜欢的理由static_cast.

此外,可以说更重要的是,每次使用reinterpret_cast是非常危险的,因为它将任何东西真正转换为其他任何东西(对于指针),而static_cast限制性更强,从而提供更好级别的保护。这已经使我避免了我不小心试图将一种指针类型强制转换为另一种指针类型的错误。

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

当将 void* 转换为任何内容时,我应该使用 static_cast 还是 reinterpret_cast 的相关文章

  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 随着时间的推移,添加到 List 变得非常慢

    我正在解析一个大约有 1000 行的 html 表 我从一个字符串中添加 10 个字符串 td 每行到一个list td
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • 结构体的内存大小不同?

    为什么第一种情况不是12 测试环境 最新版本的 gcc 和 clang 64 位 Linux struct desc int parts int nr sizeof desc Output 16 struct desc int parts
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置

随机推荐

  • 如何在 CodeIgniter 中组织模板结构?

    我将为我的最终 Web 开发课程项目构建一个 CMS 我的老师向我提出了在 MVC 系统中创建它的挑战 现在我将使用 CodeIgniter 因此 我想知道您如何组织文件 文件夹结构 我将使用一个简单的模板系统 现在我有一个 templat
  • 如何在Vista下使用WIA 1进行开发?

    我在Vista SP1下使用VS2008 SP1 我的 Net 程序使用对 WIA Microsoft Windows 图像采集库 v2 0 的 COM 引用 我正在使用 CommonDialogClass ShowAcquireImage
  • C/C++ 中的双向链表与多链表 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 双链表和多链表有什么区别 在 C C 程序的帮助下会更好地解释我 定义 A 多链表是一个链表 其中每个节点可以包含指向链表的多个节点的
  • PHP 解析包含

    我包括一个文件init php它定义路径常量 所以如果我包括init php在一个文件中 索引 php 然后在另一个文件中 布局 header php is init php在添加到这些文件之前进行解析 还是添加到父文件中 然后将父文件作为
  • 将数据显示为网络应用程序热图的世界地图[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 是否有任何工具包 库可以生成世界地图并在热图视图中叠加数据 例如 Google 上的工具包 库 我需要能够在本地生成和显示地图 而不是通过
  • 在 bourne shell 中的用户定义函数中使用 getopts

    是否可以将命令行参数从 bourne 脚本内传递到函数中 以便允许 getopts 处理它们 我的脚本的其余部分很好地打包到函数中 但开始看起来我必须将参数处理移至主逻辑中 现在是这样写的 但是不行 processArgs while ge
  • 使用 CTE 以及开始和结束日期时间避免日期时间间隔中的间隙

    由于某种原因 我发现使用此查询的时间间隔存在间隙 我只使用基本数据就可以正常工作 但是 当连接表并指定 WHERE 子句时 我发现时间间隔存在间隙 我还需要将 S SessionEndTime 合并到我的时间间隔中 以查找 Response
  • 设置 blob 的内容类型

    我们正在转移一个Blob 图片 下载一个 websocket 并将其渲染到另一端的画布上 当我使用createObjectURL对于斑点 我收到以下警告 Resource interpreted as Image but transferr
  • Rails form_for 选择已选择选项的标签

    我正在使用 form for 来更新用户个人资料 作为表单的一部分 我使用选择菜单 菜单由数组填充 即 STATUS Active active In Active inactive 然后在表格中 虽然这项工作没有选择之前在编辑时选择的选项
  • querySelector 中哪些字符需要转义?

    根据这里的文档 https developer mozilla org en US docs Web API document querySelector Notes https developer mozilla org en US do
  • 如何用Java编写某些语法的LALR解析器?

    我想编写 Java 代码来为我的语法构建 LALR 解析器 有人可以推荐一些书籍或一些链接 让我可以学习如何为 LALR 解析器编写 Java 代码吗 手动编写 LALR 解析器很困难 但他可以做到 如果您想了解手动构建解析器背后的理论 请
  • CodeIgniter - 自动加载

    我想知道 CodeIgniter 自动加载的最佳实践是什么 自动加载我的所有内容是不是不好的做法might是否曾经需要过 或者可以这样做吗 这会给应用程序带来更多负载吗 目前 我只是自动加载我将在整个应用程序中使用的库和助手 autoloa
  • MySQL 视图:在另一个计算字段中引用一个计算字段(按名称)

    例如 如何定义具有两个计算字段的视图 TableName BlueSquares TableName RedSquares AS TotalSquares TableName BlueCirles TableName RedCircles
  • 如何从一个Android应用程序调用另一个Android应用程序

    我想从另一个应用程序调用一个 Android 应用程序 我尝试过一些examples http www anddev org install run applications from within another application
  • 使用 JsonView 将 POJO 转换为 JsonNode

    我正在编写一个典型的 Play Framework 应用程序 我想使用 Jackson 从控制器的方法返回 JsonNode 这就是我现在正在做的 public static Result foo MyPojoType myPojo new
  • 如何禁用 moment.js 夏令时时区转换

    可以在 moment js 中禁用日光时区转换吗 http plnkr co edit MjFelt p preview http plnkr co edit MjFelt p preview scope obj date moment 2
  • 如何检查 Mypy `# type:ignore` 注释是否仍然有效且必需?

    想象一下 我们有一些巨大的遗留代码库 其中有很多文件被忽略了 Mypy 警告 def foobar x some external class some method 0 type ignore ignore some mypy warni
  • spring boot应用程序在ec2上自动关闭

    我在 ec2 上部署了 springboot 应用程序 ubuntu 为 t2 medium 大小 AWS AMI 为 t3 medium 大小 在我的本地电脑上 没有问题 但在 ec2 上 几个小时后 在我不工作期间 它自己死了 我只是想
  • 模块“pandas”没有属性“read_csv”

    import pandas as pd df pd read csv FBI CRIME11 csv print df head 运行这个简单的代码会出现错误 Traceback most recent call last File C U
  • 当将 void* 转换为任何内容时,我应该使用 static_cast 还是 reinterpret_cast

    Both static cast and reinterpret cast似乎适合铸造void 到另一个指针类型 是否有充分的理由偏爱其中之一 Use static cast 这是最精确的转换 准确地描述了此处进行的转换 有一个误解 认为使