将const void*转换为没有const_cast的其他指针时出错

nav*_*erm 3 c++ casting const

功能

int compare(const void* a, const void* b)
{
    SomeDataType g1 = *(static_cast<SomeDataType*>(a));
    SomeDataType g2 = *(static_cast<SomeDataType*>(b));
    g1.firstelement < g2.firstelement ? 1 : -1;
}
Run Code Online (Sandbox Code Playgroud)

此代码返回一个错误,指出"静态强制转换无法从const void*强制转换为SomeDataType*".我使用const_cast之类的

SomeDataType g1 = *(static_cast<SomeDataType*>(const_cast<void*>(a))) ; 
Run Code Online (Sandbox Code Playgroud)

让这个工作.这是一种正确的方法吗?或者我错过了什么?我不太明白这是如何工作的.

Dav*_*eas 5

感觉不对,因为感觉不对.有人给了你一个指针,你在接口中承诺你不会修改它,抛弃const你的承诺(好吧,不是真的,但是类型系统认为如果你抛弃const,是因为你想要修改对象,这违背你的承诺).

我建议你不要放弃const:

int compare(const void* a, const void* b)
{
    SomeDataType g1 = *(static_cast<const SomeDataType*>(a));
    SomeDataType g2 = *(static_cast<const SomeDataType*>(b));
    return g1.firstelement < g2.firstelement ? 1 : -1;
}
Run Code Online (Sandbox Code Playgroud)