功能
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)
让这个工作.这是一种正确的方法吗?或者我错过了什么?我不太明白这是如何工作的.
感觉不对,因为感觉不对.有人给了你一个指针,你在接口中承诺你不会修改它,抛弃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)
归档时间: |
|
查看次数: |
4102 次 |
最近记录: |