首页 > 解决方案 > 将 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 强制转换的情况下做到这一点。

标签: c++

解决方案


以简单的方式复制您的情况,假设您有以下代码:

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非常准确地指出的那样,这没有多大意义,除非只是为了让编译器闭嘴。


推荐阅读