【发布时间】:2018-05-27 08:03:01
【问题描述】:
我正在使用一个 API,它为我提供了内存映射 I/O 的指针。它通过填写一个指向指针的参数来做到这一点:
int map(void** p);
因为这是内存映射 I/O,我很确定我应该在这里使用 volatile。 (我不知道他们为什么不将参数设为volatile void**。)
但是,我的volatile void** 不能隐式转换为函数的void**,所以我不能直接将它传入:
volatile void* p;
map(&p); // Error: no known conversion from 'volatile void **' to 'void **'.
我目前正在使用一个额外的变量和一个单独的分配步骤来解决这个问题:
volatile void* p;
void* pNonVolatile;
map(&pNonVolatile);
p = pNonVolatile;
这似乎很冗长。在这种情况下,在传递指针时将volatile 扔掉是否安全?即
volatile void* p;
map(const_cast<void**>(&p));
【问题讨论】:
-
你确定它一定是易失性的吗?请检查this question
-
从 API 获取
void *,然后根据需要将其转换为volatile void **。 -
请注意,
volatile对于进程间同步来说既非必要也不充分 -
您大概需要将返回值转换为其他类型才能对其进行任何处理,而不是将其传递回相同的 API,无论如何?
标签: c++ type-conversion volatile