是否使一个结构易失性使其所有的成员变化?

如果我有:

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

constvolatile是同一枚硬币的两个面; 他们是这样的标准往往把他们称为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;