什么时候可以比较 C++ 中同一对象的指针?

2024-04-17

例如,我有一些类层次结构(可能具有各种继承 - 公共、私有、公共虚拟、多重继承等):

class A {
  int a;
public:
  virtual ~A() {}
};

class B: public A { int b; };
class C: public virtual B { int c; };
class E: public virtual B { int e; };
class F: public C, public E { int f; };

使用强制转换,我可以获得指向主“大”对象的每个子对象的指针:

F * f = new F;
E * e = f;
C * c = f;
B * b = f;
A * a = f;

我可以比较哪些指针对是否相等(运算符==),为什么? 比较会使用增量逻辑或其他技术吗?

当我无法比较指向同一复杂对象的指针时,可能会出现哪些情况? 它可以是什么样的物体?

我期望指向同一对象的所有指针始终相等。


如果一种指针类型可以隐式转换为另一种类型,则可以比较两个指针;也就是说,如果它们都指向同一类型,或者一个指向另一个的基类。转换将对地址进行必要的调整,以便如果两个指针都指向同一个对象,则它们将比较相等。

在这种情况下,您可以比较任何对,除了c == e,因为都没有C nor E是从对方派生出来的。要比较它们,您要么需要交叉转换,要么将它们转换为它们的公共基类;这些都不能隐式完成。

顺便说一句,没有必要dynamic_cast在您的代码中,因为您正在转换为基类指针,并且可以隐式完成安全转换。

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

什么时候可以比较 C++ 中同一对象的指针? 的相关文章

  • MongoDB C# 驱动程序检查身份验证状态和角色

    这是我使用 MongoDB 身份验证机制登录 MongoDB 的代码 try var credential MongoCredential CreateMongoCRCredential test admin 123456 var sett
  • 如何调试参数化 SQL 查询

    我使用 C 连接到数据库 然后使用 Ad hoc SQL 来获取数据 这个简单的 SQL 查询非常方便调试 因为我可以记录 SQL 查询字符串 如果我使用参数化 SQL 查询命令 有没有办法记录 sql 查询字符串以进行调试 我想就是这样的
  • LINQ to XML - 如何正确使用 XDocument

    现在我首先要说的是 这确实是一项任务 然而 在我遇到 Linq to XML 语法之前 我几乎已经完成了它 我有 2 个课程 曲目和 CD 现在作为作业的一部分 我创建了一张 CD 然后向其中添加了一些曲目 在搜索了大量完美解释了如何从 x
  • 测试 hdf5/c++ 中的组是否存在

    我正在打开一个现有的 HDF5 文件来附加数据 我想向那个叫做的小组保证 A存在以供后续访问 我正在寻找一种简单的方法来创建 A有条件地 如果不存在则创建并返回新组 或者返回现有组 一种方法是测试 A存在 我怎样才能高效地做到这一点 根据
  • 为什么C Clock()返回0

    我有这样的事情 clock t start end start clock something else end clock printf nClock cycles are d d n start end 我总是得到输出 时钟周期是 0
  • 使用 VSTO 更改 Outlook 设置

    我刚刚花了大约 4 个小时试图弄清楚如何以编程方式检索 设置 Microsoft Outlook 2010 的 Outlook 设置 我所说的 设置 是指文件 选项 邮件下的设置 我想做的是检索用户设置的设置列表 自动化我们每天需要在某些消
  • 组合 Datepicker 和 Timepicker 值 Win 8.1

    我试图同时使用 Datepicker Timepicker 来返回可以存储在数据库中的 DateTime 例如 我想要安排会议的开始日期和结束日期 如果适用 我将如何将这些值组合成 SQL 数据库可以处理的正确格式 任何反馈都会很棒 我让这
  • 如何避免选择项目时 winforms 树视图图标发生变化

    我正在一个小型 C Winforms 应用程序中尝试树视图 我已经以编程方式将 ImageList 分配给树视图 并且所有节点都很好地显示了它们的图标 but当我单击一个节点时 它的图标会发生变化 变为 ImageList 中的第一个图像
  • glDrawElements 只绘制半个四边形

    这是我的功能 void Object draw2 if mIsInitialised return Tell OpenGL about our vertex and normal data glEnableClientState GL VE
  • 推送 Lua 表

    我已经创建了一个Lua表C 但我不知道如何将该表推入堆栈顶部 以便我可以将其传递给 Lua 函数 有谁知道如何做到这一点 这是我当前的代码 lua createtable state libraries size 0 int table i
  • 如何在不使用reinterpret_cast的情况下使用dlsym()加载函数?

    我正在尝试使用 clang tidy 来强制执行 C 核心指南 虽然它确实有很多有效点 但有一件事我无法真正解决 dlsym 返回一个void 我需要以某种方式将其转换为正确的函数指针 为此 我使用reinterpret cast 由于指南
  • 当格式字符串包含“{”时,String.Format 异常

    我正在使用 VSTS 2008 C Net 2 0 执行以下语句时 String Format 语句抛出 FormatException 有什么想法是错误的吗 这是获取我正在使用的 template html 的位置 我想在 templat
  • 在可观察项目生成时对其进行处理

    我有一个IObservable它会生成一次性物品 并且在其生命周期内可能会生成无限数量的物品 因此 我想在每次生成新项目时处理最后一个项目 因此Using http reactivex io documentation operators
  • 使用 Linq 进行异步Where过滤

    我有一个List通过填充的元素async调用 WebService 没问题 我需要过滤该列表以便在应用程序视图上显示某些内容 我试过这个 List
  • 为什么 C 函数不能返回数组类型?

    我是 C 语言新手 想知道 为什么 C 函数不能返回数组类型 我知道数组名是数组第一个值的地址 而数组是 C 中的二等公民 您自己已经回答了这个问题 数组是二等公民 C 按值返回 数组不能按值传递 因此不能返回它们 至于为什么数组不能按值传
  • 如何在 C++ 中使用 PI 常数

    我想在一些 C 程序中使用 PI 常数和三角函数 我得到三角函数include
  • 如何从枚举中选择随机值?

    给定 C 中的任意枚举 如何选择随机值 我没有找到这个非常基本的问题 我会在一分钟内发布我的答案作为任何人的参考 但请随意发布你自己的答案 Array values Enum GetValues typeof Bar Random rand
  • SSBO 是更大的 UBO?

    我目前正在 OpenGL 4 3 中使用 UBO 进行渲染 以将所有常量数据存储在 GPU 上 诸如材料描述 矩阵等内容 它可以工作 但是 UBO 的小尺寸 我的实现为 64kB 迫使我多次切换缓冲区 减慢渲染速度 我正在寻找类似的方法来存
  • 如何仅更改 DateTime 的日期部分,同时保留时间部分?

    我在代码中使用了很多 DateTime 我想将这些日期时间更改为我的特定日期并保留 时间 1 2012 02 02 06 00 00 gt 2015 12 12 06 00 00 2 2013 02 02 12 00 00 gt 2015
  • 当我读取 500MB FileStream 时出现 OutOfMemoryException

    我使用 Filestream 读取大文件 gt 500 MB 但出现 OutOfMemoryException 任何有关它的解决方案 我的代码是 using var fs3 new FileStream filePath2 FileMode

随机推荐

  • 无需安装即可使用Python

    我有一个安装程序 它使用 Python 脚本来安装多个组件 我不想在用户计算机上安装 Python 如果用户还没有安装 Python 并且我也不希望安装 Python 成为使用我的安装程序的先决条件 有没有一种方法可以在不使用安装程序的情况
  • 范围之间的随机日期时间 - 不统一输出

    我实现了下面的 RandomDate 但我总是不断获取接近 From 日期的值 我可能在这里错过了一些东西 public static DateTime GetRandomDate DateTime from DateTime to var
  • 为什么矢量化通常比循环更快?

    为什么在执行操作的硬件的最低级别和所涉及的一般底层操作 即 运行代码时所有编程语言的实际实现通用的事情 矢量化通常比循环快得多 计算机在循环时会做什么而在使用矢量化时不会做什么 我指的是计算机执行的实际计算 而不是程序员编写的计算 或者它有
  • ChrisBanes PullToRefresh“正在加载...”问题

    我正在使用我发现的 chrisbanes 的 PullToRefresh ListViewhere https github com chrisbanes Android PullToRefresh 多亏了它的文档 我成功地实现了它 然而
  • 将 Spark Dataframe 保存到 Elasticsearch - 无法处理类型异常

    我设计了一个简单的作业 使用 Spark 从 MySQL 读取数据并将其保存在 Elasticsearch 中 这是代码 JavaSparkContext sc new JavaSparkContext new SparkConf setA
  • Three.js 中的文本几何

    我在 Three js r74 中的 TextGeometry 遇到一些问题 我该如何正确实施 这是我的代码笔 codepen io cheesyeyes pen eJqZxK 提前致谢 好吧 对于每个正在寻找简单答案而不是链接和其他超载示
  • 如何将数组写入 Google 电子表格?

    我正在构建一个具有整数值的数组 并尝试一次性将其写入 Google 电子表格 var myArray new Array for i 1 i lt 100 i myArray i i ss getRange 8 4 1 100 setVal
  • 如何通过连接到 Linux 计算机的 GSM/GPRS 调制解调器发送彩信? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我有一个目录 其中包含 50 个图像
  • 9 补丁填充区域不适用于多个比例区域

    在我的 9 补丁中 我添加了一个填充区域 作为占据红色矩形下方大部分宽度的内容 然而 正如比例图像所示 它不起作用 如果我删除箭头所示的比例区域 那么它就可以完美工作 我做错了什么或者不理解 9 补丁吗 Thanks 我找到了一个相关的答案
  • Rails:form_for复选框设置为true或false,无论该框被选中/取消选中

    我有一个名为 users 的模型 它有 2 个布尔属性send email and send text 我有一个编辑用户模型的表单 我希望它根据该框是否选中 取消选中将这些属性设置为 true false 这是我的表格 div class
  • C# 泛型类型推断与协方差 - bug 或限制

    当具有依赖参数的泛型方法推断类型时 它在某些情况下会给出意外的结果 如果我明确指定类型 则一切都可以正常工作 无需任何进一步的更改 IEnumerable
  • 两个相同的 git 存储库

    我们在一个大团队中使用 git 作为项目的源代码 现在大约有一半的开发商正在离开 进入项目的现场阶段 此阶段将涉及大量开发 即许多提交 同时剩下的另一半也将继续编写代码 不幸的是 现场的互联网连接时断时续且不可靠 然而 至关重要的是 现场团
  • Julia JUMP Gurobi MIP - 查询并存储最佳目标并在运行时绑定

    我通过 Julia 中的 JuMP 包使用 Gurobi 来解决混合整数程序 我想获得一个图表像这个 https i stack imgur com 427LC png 其中还提供了基于 Python 的解决方案 也已在古罗比社区形式 ht
  • 如何在 Swift 中访问深度嵌套字典

    我的应用程序中有一个非常复杂的数据结构 我需要对其进行操作 我正在尝试跟踪玩家的花园中有多少种错误 虫子有十种 每种有十种图案 每种图案有十种颜色 因此可能存在 1000 个独特的错误 我想跟踪玩家拥有的每种类型的错误数量 嵌套字典如下所示
  • WPF MVVM EF 简单示例

    当我正在努力将数据插入视图模型时 我希望有人可以帮助我开始这个简单的 WPF MVVM 示例 我有一个 SQL 表温度 其中每个记录都有一个时间戳 然后是一个数值 例如 记录时间 温度2013年1月1日 00 00 6001 01 2013
  • 如何在多个Lua State(多线程)之间传递数据?

    我在中启动Redis连接池redis lua 通过从 C 调用 我得到了redis lua state 此 Lua 状态全局启动一次 仅在其他线程中启动get从中 当有一个 HTTP 请求 工作线程 时 我需要从redis lua stat
  • 将角度定量数据转换为定性图像

    我是一名晶体学家 试图从多达 5000 个文件中分析晶体方向 Matlab 能否转换表格中的角度值 如下所示 进入一个看起来像这样的表 这是一个基于 Lakesh 想法的更具体的例子 然而 这将处理任意数量的旋转 首先从中间有一条带的基本圆
  • 如何将地名词典或词典表示为 crf++ 中的特征?

    如何使用地名词典或词典作为功能CRF https taku910 github io crfpp 详细说明 假设我想对人名进行 NER 并且我有一个包含常见人名的地名词典 或字典 我想使用这个地名词典作为 crf 的输入 我该怎么做 我正在
  • 使用来自不同模块的 python 装饰器函数

    我想使用另一个模块中的函数作为装饰器 但我需要它来操作当前模块的全局命名空间 例如 我希望能够从这里开始 class SomeClass pass root SomeClass to this from othermodule import
  • 什么时候可以比较 C++ 中同一对象的指针?

    例如 我有一些类层次结构 可能具有各种继承 公共 私有 公共虚拟 多重继承等 class A int a public virtual A class B public A int b class C public virtual B in