当前位置: 首页 > 知识库问答 >
问题:

reinterpret_cast可以改变对象表示吗?

蓬弘
2023-03-14

共有1个答案

唐腾
2023-03-14

这里有一个例子:如果你读到第4个要点:

指针可以显式转换为任何大到足以容纳其类型的所有值的整数类型。映射函数是实现定义的。[注:意在对那些了解底层机器寻址结构的人来说并不奇怪。--结尾注]

现在,是实现定义的,这里的i的值是什么:

void *ptr = <some valid pointer value>;
uintptr_t i = reinterpret_cast<uintptr_t>(ptr);

char*int*在Cray T90上具有不同的表示形式,因此:

int *i = <some int pointer value>;
char *c = reinterpret_cast<char *>(i);

这里,ic在Cray T90上的表示形式不同(并且执行此转换肯定使用CPU指令)。

(我已经验证了这一点,Cray C/C++参考手册SR-2179 2.0第3.1.2.7.1章)

 类似资料:
  • 问题内容: 我正在努力使可变对象与不可变对象有关。使用可变对象会带来很多负面影响(例如,从方法中返回字符串数组),但是我很难理解它的负面影响。使用可变对象的最佳实践是什么?您是否应尽可能避免使用它们? 问题答案: 好吧,这有几个方面。 没有参考身份的可变对象会在奇数时间导致错误。例如,考虑使用基于值的方法的 : 当实例用作键时,实例在映射中“丢失”,因为实例和相等性基于可变值。这些值在映射之外更改

  • 问题内容: 当在MySQL中执行ALTER TABLE语句时,整个表在语句期间被锁定(允许并发读取,但禁止并发写入)。如果它是一个大表,则可能会在很长一段时间内阻止INSERT或UPDATE语句。有没有一种方法可以进行“热更改”,例如以在整个过程中仍可更新表的方式添加列? 通常,我对MySQL解决方案感兴趣,但如果MySQL无法做到,我也会对其他RDBMS感兴趣。 要澄清的是,我的目的仅仅是避免在

  • 问题内容: 我有一类具有各种成员变量的类。有一个构造函数,有getter方法,但没有setter方法。实际上,该对象应该是不变的。 现在我注意到了以下几点:当我使用getter方法获得变量列表时,可以添加新值,依此类推- 可以更改。下次调用此变量时,将返回更改的内容。怎么会这样?我没有再设置它,我只是在做它!使用这种行为是不可能的。那么这里有什么区别? 问题答案: 仅仅因为 对 列表 的引用 是不

  • 问题内容: 可以改变外观吗? 问题答案: 您不能对控件本身进行太多修改。 由于单击与输入正确配对的元素会激活/聚焦它,因此我们可以使用a 触发OS浏览对话框。 这是您可以做到的… 表单控件的CSS将使它看起来不可见,并且不会在文档布局中占用空间,但是仍然 存在, 因此可以通过激活它。 如果要在选择后显示用户选择的路径,可以使用JavaScript侦听事件,然后读取浏览器提供给您的路径(出于安全原因

  • 问题 你想改变对象实例的打印或显示输出,让它们更具可读性。 解决方案 要改变一个实例的字符串表示,可重新定义它的 __str__() 和 __repr__() 方法。例如: class Pair: def __init__(self, x, y): self.x = x self.y = y def __repr__(self):

  • 本文向大家介绍浅谈Python中的可变对象和不可变对象,包括了浅谈Python中的可变对象和不可变对象的使用技巧和注意事项,需要的朋友参考一下 什么是可变/不可变对象 不可变对象,该对象所指向的内存中的值不能被改变。当改变某个变量时候,由于其所指的值不能被改变,相当于把原来的值复制一份后再改变,这会开辟一个新的地址,变量再指向这个新的地址。 可变对象,该对象所指向的内存中的值可以被改变。变量(准确