次のコードを検討してください。
int main()
{
int i;
volatile int* p = &i;
int *v = p;
return 0;
}
これにより、次のエラーが発生しg++
ます。
$ g++ -o volatile volatile.cpp
volatile.cpp: In function ‘int main()’:
volatile.cpp:6: error: invalid conversion from ‘volatile int*’ to ‘int*’
p
私の意図は、揮発性にしたいということでした。ただし、の値を読み取った後は、アクセスが揮発性であるp
かどうかは関係ありません。なぜ揮発性であると宣言v
する必要があるのですか?v
もちろん、これは架空のコードです。p
実際の状況では、それはメモリの場所を指していると想像できますが、外部で変更されているので、後で外部で変更されたとしても、その時点で指してv
いた場所を指したいと思います。したがって、揮発性ですが、そうではありません。p
v = p
p
p
v
ちなみに、これがCとC ++の両方と見なされる場合の動作に関心がありますが、Cでは、これは警告のみを生成し、エラーは生成しません。