Hello guys,
In C++, volatile
is treated the same way const
is: passing a pointer to volatile data to a function that doesn't want the volatile
modifier triggers a compile error.
int foo(int* bar) { /* snip */ }
int main()
{
volatile int* baz;
foo(baz); // error: invalid conversion from ‘volatile int*’ to ‘int*’
}
Why is it dangerous? It's obvious for the const
modifier that removing it can break const
correctness; but is there such a thing as "volatile
correctness"? I can't figure out how passing a pointer to volatile data as a pointer to non-volatile data could cause problems.
EDIT Just so you guys know why I was using volatile
in the first place: many of Mac OS X's OSAtomic
family of functions (for atomic increments, decrements, additions, subtractions, compare and swap, etc.) takes volatile
arguments.