gpt4 book ai didi

c++ - 在没有 const_cast 的情况下将 const void* 转换为其他指针时出错

转载 作者:太空狗 更新时间:2023-10-29 19:53:18 25 4
gpt4 key购买 nike

函数

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;
}

此代码返回一个错误,指出“静态转换无法从 const void* 转换为 SomeDataType*。”我像 const_cast 一样使用

SomeDataType g1 = *(static_cast<SomeDataType*>(const_cast<void*>(a))) ; 

让这个工作。这是正确的做法吗?或者我错过了什么?我不太了解这是如何工作的。

最佳答案

它感觉不对,因为它不应该感觉对。有人给了你一个指针,在你 promise 不会修改它的接口(interface)中,放弃 const 是违背你的 promise (好吧,不是真的,但是类型系统认为如果你放弃 const ,是因为您想修改对象,这违反您的 promise )。

我建议你不要删除 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;
}

关于c++ - 在没有 const_cast 的情况下将 const void* 转换为其他指针时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15342736/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com