考虑以下代码:
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
声明为 volatile?
这当然是假设的代码。在实际情况下,您可以想象它p
指向一个内存位置,但在外部进行了修改,我想v
指向当时指向的位置p
,v = p
即使后来p
被外部修改。因此p
是易变的,但v
不是。
顺便说一句,我对这被认为是 C 和 C++ 的行为感兴趣,但在 C 中这只会产生警告,而不是错误。