Я работаю с API, который дает мне указатель для ввода-вывода с отображением в памяти.Это делается путем заполнения аргумента указатель на указатель:
int map(void** p);
Поскольку это ввод-вывод с отображением в памяти, я вполне уверен, что здесь следует использовать 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));