考慮下面的代碼:爲什麼在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