是否使一个结构易失性使其所有的成员变化?
如果我有:
struct whatever { int data; };
volatile whatever test;
test.data
会不稳定呢?
另一个问题可以问(或者只是另一种方式来看原来的问题):
是否使一个结构const
使其所有成员的const
?
如果我有:
struct whatever { int data; }; const whatever test;
test.data也会是const
吗?
我的回答是:是的。 如果你用const
声明一个types的对象,那么它的所有成员也是const
同样的,如果你声明一个types为volatile
的对象,那么它的所有成员都是volatile
,就像你用const
声明对象一样,它的所有成员也是const
。
const
和volatile
是同一枚硬币的两个面; 他们是这样的标准往往把他们称为cv-qualifiers
。
从标准引用($ 7.1.5.1 / 8)
[注意:volatile是对实现的暗示,以避免涉及对象的侵略性优化,因为对象 的值可能会被实现检测不到的手段所改变。 有关详细的语义,请参阅1.9。 一般来说,volatile中的语义和C中的意思是一样的。
这意味着,如果你的对象是一个结构体的实例,那么编译器就不能避免涉及这个对象的侵略性优化 , 除非它避免了它的每个成员的积极优化。 (否则,如何避免涉及对象的优化呢?)
相关主题:
为什么我们在C ++中使用volatile关键字?
来自: http : //msdn.microsoft.com/en-us/library/145yc477%28v=vs.80%29.aspx
要将指针指向的对象声明为const或volatile,请使用以下格式的声明:
const char *cpch; volatile char *vpch;
要将指针的值(即存储在指针中的实际地址)声明为const或volatile,请使用以下格式的声明:
char * const pchc; char * volatile pchv;