gpt4 book ai didi

c++ - 为什么对对象进行类型转换不会更改其地址?有关对象类型的信息存储在哪里?

转载 作者:行者123 更新时间:2023-11-30 01:34:19 24 4
gpt4 key购买 nike

我刚刚使用 qobject_cast 对此进行了测试(但我想它对于任何其他类型的类型转换都是相同的),并且显然将对象转换为不同的类型不会更改其地址。这让我觉得关于对象类型的信息存储在别处……是这样吗?

我对 C++ 还是个新手,所以如果这完全没有意义,请随时告诉我。任何帮助表示赞赏。

最佳答案

Why does typecasting an object not change its address?

因为类型转换对源对象的影响绝对为零1。类型转换总是产生一个新对象(可能是不同类型的)或一个引用。此外,没有任何操作可以更改任何对象的地址。一个对象在其整个生命周期中都存储在一个地址中。

如果类型转换的结果是一个引用,那么该引用可能引用不同地址中的另一个对象,特别是在转换为对同一继承层次结构中的类型的引用时。

1 从技术上讲,转换构造函数或转换运算符可以修改源对象,但这非常不合常规。

Where is information about the object's type stored?

类型信息由编译器在编译程序时“存储”。 一般,程序本身不需要存储信息。

在多态类型的特殊情况下,有关对象类型的一些信息存储在程序的内存中以支持dynamic_cast 和动态typeid。它存储在语言实现选择合适的任何位置。

I just tested this out using qobject_cast

C++ 中没有qobject_cast 这样的东西。也许您正在使用一些库。

关于c++ - 为什么对对象进行类型转换不会更改其地址?有关对象类型的信息存储在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56565161/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com