请考虑以下代码:
int main()
{
int i;
volatile int* p = &i;
int *v = p;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这给出了一个错误g++
:
$ g++ -o volatile volatile.cpp
volatile.cpp: In function ‘int main()’:
volatile.cpp:6: error: invalid conversion from ‘volatile int*’ to ‘int*’
Run Code Online (Sandbox Code Playgroud)
我的意图是我想要p
挥发性.但是,一旦我读过它的值p
,我就不在乎访问v
是不是易变的.为什么要求v
声明为volatile?
这当然是假设的代码.在实际情况下,你可以想像,p
指向一个内存位置,但在外部修改,我想v
指向该位置p
在时指出v = p
,即使后来p
被外部修改.因此p
是不稳定的,但v
事实并非如此.
顺便说一句,当我认为这是C和C++时,我对这种行为感兴趣,但在C中,这只会产生警告,而不是错误.
Mik*_*our 36
如果你的意思是指针应该是易失性的,而不是它指向的对象,那么将其声明为
int* volatile p;
Run Code Online (Sandbox Code Playgroud)
Joh*_*ing 14
在C++中,volatile
关键字对您可以执行的操作应用相同类型的限制const
.标准将此称为'常规/挥发性资格中的'cv-qualification'.Consts只能由consts使用,并且挥发性只能由挥发物使用.
另外,这可以帮助您编写多线程代码.不是通过使用一些编译器魔法使你的变量突然变成原子或类似的东西,而是强迫你只是以易变的方式对易失性数据进行操作.有关更多信息,请参阅此Alexandrescu文章.
归档时间: |
|
查看次数: |
4866 次 |
最近记录: |