c++ - 将 void* 转换为 const void**
问题描述
在 CPP 中,我使用 C 库,其中一种方法需要const void **
作为参数。
在我的课堂上,我有一个类型为void *
.
我试图通过做来调用该函数,function(&my_property)
但编译器抱怨它无法将 a 转换void **
为 a const void **
。
为了解决这个问题,我使用了 const cast 并做了function(const_cast<const void *>(&my_property))
.
我尽量避免强制转换,我想知道是否有一种“干净”的方法可以在不使用 const 强制转换的情况下做到这一点。
解决方案
以简单的方式复制您的情况,假设您有以下代码:
void function(const void **p)
{
//...
}
int main()
{
void *my_property;
function(&my_property);
}
使用const_cast
是安全的,我认为这不是那么不干净,但你有其他选择,最好的办法是my_property
变成 a const void*
,怀疑这可能不是一个选项,你可以只使用一个const void*
指针来分配原文void*
:
void *my_property;
const void *pp = my_property;
function(&pp);
转换仍然存在,但它是隐式的。
正如 Quentin非常准确地指出的那样,这没有多大意义,除非只是为了让编译器闭嘴。
推荐阅读
- typescript - 获取 Observable 的值
在一个对象 - git - GIT (TFS) 错误:HTTPS 推送上的身份验证失败
- ios - 无法在 IOS 模拟器上安装 ReactNative 应用程序
- react-admin - React-admin:如何从 AppBar 隐藏刷新按钮?
- python - 替换功能是多次替换单词并组合单词。我怎样才能解决这个问题?
- ms-access - 将多列转置为 2 列
- android - RecyclerView 在更改项目的 UI 时重复项目
- python - 关于在 TFLearn 中使用非二进制标签的问题
- android - 分发没有证书的android应用发布版本
- jprofiler - JProfiler 与 ArangoDB