【问题标题】:reinterpret_cast changes type from `const float *` to `float` unexpectedlyreinterpret_cast 意外地将类型从 `const float *` 更改为 `float`
【发布时间】:2019-12-06 11:29:59
【问题描述】:

我有一个指针:

const float  *m_posBufferPtr_float;

我给这个变量赋值:

m_posBufferPtr_float = reinterpret_cast<const float *>(buffer()->data().constData());

constData() 函数返回 const char * 类型:

inline const char *QByteArray::constData() const
{ return d->data(); }

因此我的reinterpret_cast 应该const char * 转换为const float *


但令我惊讶的是,之前 reinterpret_cast 我的指针是:

之后 reinterpret_cast 调试器将我的指针显示为:


我想知道为什么reinterpret_castconst char * 转换为float 而不是const float *

【问题讨论】:

  • 调试器似乎显示了指向的值而不是它的地址。如果检查类型,第二张图片中为float,第一张图片中为float*
  • 您可以通过创建一个简单的玩具程序来确认上述情况,该程序只需将 const float ptr 分配给 const float 的地址。
  • @RomhaKorev 谢谢。在图像上,三列是NameValueType。图片上的值是红色的。
  • 它没有转换它我认为它只是你的调试器试图提供帮助并取消引用指针以显示指向的值而不是指针的值。
  • reinterpret_cast 不转换任何内容。顾名思义,它会导致您的程序将 char 指针重新解释为浮点指针。如果你的 char 指针没有指向浮点数,你就有问题了。

标签: c++ qt reinterpret-cast


【解决方案1】:

如果你拿这个sn-p:

int main(int argc, char *argv[])
{
    float* pointer = nullptr;

    float value = 12.34;
    pointer = &value;


    qDebug() << *pointer;
}

一步一步执行,你会在调试器中看到:

然后

请注意,当指针初始化后,类型变为float。这是由于调试器的配置造成的。

在 Qt Creator 中,右键单击您的指针并取消选中 自动取消引用指针

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-30
    • 2011-09-22
    • 2020-03-02
    相关资源
    最近更新 更多