Static_cast 对于康斯特来说,会抛弃预选赛
Static_cast for const casts away qualifiers
我正在编写具有以下函数的代码,并且是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
是指向const
T
的指针。这
T* const p
是指向T
的const
指针。注意到区别了吗?在第一个示例中,指针指向的事物是const
的事物。在第二个示例中,指针本身就是const
的东西。尝试将void const*
强制转换为mycustomStruct* const
意味着投射指向指向const
指向未const
的事物的指针(只是指针本身恰好是const
(。因此,这个演员阵容会放弃一个const
限定符,这不是static_cast
能做到的......
你可能想写
const mycustomStruct* pFlmcCtrl = static_cast<const mycustomStruct*>(pMdbCluster);
相关文章:
- 在 c++ 中向下抛弃疑惑
- Static_cast 对于康斯特来说,会抛弃预选赛
- C++如何抛弃函数的虚拟性并调用基本函数,而不是覆盖
- 抛弃 *这会导致未定义的行为吗?
- 是类模板中所需的模板预选赛非依赖性成员变量
- 为什么``精确的预选赛''不生效
- 将Boost iNCETE_INTERVAL传递给该参数丢弃了预选赛[-fpermissive]
- C++17 标准 - 抛弃静态常量
- C :即使成员变量可变,也会放弃预选赛
- 在模板中强制转换为引用似乎会抛弃恒定性
- 忽略了部分功能专业化中价值类型的最高级别const预选赛
- 从指针或引用中抛弃常量/易失性
- 抛弃灾难的例外 - 缺点是什么
- 抛弃康斯特,就是这种定义明确的行为
- reinterpret_cast抛弃了预选赛
- 康斯特是谎言吗?(因为康斯特可以被抛弃)
- 这是抛弃康斯特吗?
- 当函数引用对象(并访问非常量方法)时,如何抛弃常量?
- 这个移动构造函数的实现是否抛弃了移动语义?
- 你能从易失性函数中抛弃成员上的易失性吗>