首页 > 解决方案 > const 的 static_cast 抛弃限定符

问题描述

我正在编写具有以下功能和 C++ 新手的代码

foo(void const *pCluster, const uint32_t fieldNum, __attribute__((unused)) const uint32_t subFieldNum, const int64_t value)
{
    bool status = false;

    mycustomStruct* const pFlmcCtrl = static_cast<mycustomStruct* const>(pMdbCluster);

   // Some Processing
}

这给出了错误错误:static_cast from 'const void *' to 'mycustomStruct* const' casts away qualifiers

请帮助我理解这里的错误。我无法理解

标签: c++

解决方案


这个

T const* p

是指向 a 的指针const T。这个

T* const p

是指向 a 的const指针T。注意到区别了吗?在第一个示例中,指针指向的事物就是const。在第二个示例中,指针本身就是const. 尝试将a 强制转换void const*为 amycustomStruct* const意味着将指向某事物的指针强制转换为指向const非某事物的指针const(只是指针本身恰好是const)。因此,这个演员表会删除一个const限定符,这是无法static_cast做到的……</p>

你可能想写

const mycustomStruct* pFlmcCtrl = static_cast<const mycustomStruct*>(pMdbCluster);

推荐阅读