如果我有:
struct whatever {
int data;
};
volatile whatever test;
test.data
也会变得不稳定吗?
答案 0 :(得分:110)
可以提出另一个问题(或者只是另一种方式来查看原始问题):
const
成为其所有成员const
吗?如果我有:
struct whatever { int data; };
const whatever test;
test.data也是const
吗?
我的回答是:是的。如果您使用whatever
声明类型为const
的对象,则其所有成员也将const
同样,如果您使用whatever
声明类型为volatile
的对象,那么其所有成员也将是volatile
,就像您使用const
声明对象一样,它的所有成员也将是const
。
const
和volatile
是同一枚硬币的两面;它们是标准经常将它们称为cv-qualifiers
。
引自标准($ 7.1.5.1 / 8)
[注意:volatile是暗示的 实施以避免攻击性 优化涉及对象 因为对象的值可能 通过不可检测的方式改变 实现。详见1.9 语义。一般来说,语义 挥发性的意图是 C + +与C +相同。]
这意味着,如果你的对象是结构的一个实例,那么编译器就不能避免涉及对象的激进优化,除非它避免了对每个结构的积极优化成员。 (否则,它如何避免涉及对象的优化?)
相关主题:
答案 1 :(得分:-1)
来自: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;