Static_cast 对于康斯特来说,会抛弃预选赛

Static_cast for const casts away qualifiers

本文关键字:抛弃 预选赛 cast 于康斯 Static      更新时间:2023-10-16

我正在编写具有以下函数的代码,并且是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

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

T const* p

是指向constT的指针。这

T* const p

是指向Tconst指针。注意到区别了吗?在第一个示例中,指针指向的事物是const的事物。在第二个示例中,指针本身就是const的东西。尝试将void const*强制转换为mycustomStruct* const意味着投射指向指向const指向未const的事物的指针(只是指针本身恰好是const(。因此,这个演员阵容会放弃一个const限定符,这不是static_cast能做到的......

你可能想写

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