reinterpret_cast 意外地将类型从 `const float *` 更改为 `float`

reinterpret_cast changes type from `const float *` to `float` unexpectedly

我有一个指针:

const float  *m_posBufferPtr_float;

我给这个变量赋值:

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

constData() 函数 returns 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 *

如果您采用此代码段:

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

    float value = 12.34;
    pointer = &value;


    qDebug() << *pointer;
}

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

然后

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

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