C ++では、次volatile
のように扱われます。修飾子をconst
必要としない関数に揮発性データへのポインターを渡すと、コンパイルエラーがトリガーされます。volatile
int foo(int* bar) { /* snip */ }
int main()
{
volatile int* baz;
foo(baz); // error: invalid conversion from ‘volatile int*’ to ‘int*’
}
なぜ危険なのですか?const
修飾子を削除すると、const
正確性が損なわれる可能性があることは明らかです。volatile
でも「正しさ」というものはありますか?揮発性データへのポインタを不揮発性データへのポインタとして渡すと、どのように問題が発生するのか理解できません。
編集私が最初に使用した理由を皆さんが知っているようにvolatile
、Mac OS XのOSAtomic
関数ファミリーの多く(アトミックインクリメント、デクリメント、加算、減算、コンペアアンドスワップなど)はvolatile
引数を取ります。