考虑下面的代码:为什么在C++中寄生于'volatile'?
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
是易失性的,但v
不是。
顺便说一句,我对这两种行为都感兴趣,当这被认为是C和C++,但在C这只会产生一个警告,而不是一个错误。
标准不知道警告和错误之间的区别。只要它至少为程序报告一条消息,编译器就会选择如何处理违规。 – 2010-03-19 14:55:53
也许你想要一个v的副本? – slf 2010-03-19 15:02:48