You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将C++比较函数中的C风格强制转换替换为现代类型转换?

问题原因

转换报错的核心是你没有保留pArg1/pArg2的const限定符:这两个参数本身是const void*类型,C++不允许直接将带const限定的指针转换为不带const的指针类型,你之前写的STUDENT_ASSIGN_HIST_S **没有包含const修饰,因此触发编译错误。

正确写法

优先使用static_cast完成转换,这是void*转其他类型指针的标准安全写法,转换时保留const限定即可:

const STUDENT_ASSIGN_HIST_S* psAssign1 = *static_cast<STUDENT_ASSIGN_HIST_S* const*>(pArg1);
const STUDENT_ASSIGN_HIST_S* psAssign2 = *static_cast<STUDENT_ASSIGN_HIST_S* const*>(pArg2);

这里的STUDENT_ASSIGN_HIST_S* const*表示:指向const修饰的STUDENT_ASSIGN_HIST_S*指针的二级指针,和const void*的const语义匹配。

如果你确实需要使用reinterpret_cast,同样要带上const限定:

const STUDENT_ASSIGN_HIST_S* psAssign1 = *reinterpret_cast<STUDENT_ASSIGN_HIST_S* const*>(pArg1);

说明

不推荐使用const_cast主动丢弃const限定,qsort回调参数的const本身是约定回调函数不会修改传入元素,保留const符合语义要求,也更安全。

内容的提问来源于stack exchange,提问作者Andrew Truckle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 18:36:03