使结构变为volatile会使其所有成员变得不稳定吗?

时间:2010-12-18 19:06:34

标签: c++

如果我有:

struct whatever {
int data;
};
volatile whatever test;
test.data也会变得不稳定吗?

2 个答案:

答案 0 :(得分:110)

可以提出另一个问题(或者只是另一种方式来查看原始问题):

使结构const成为其所有成员const吗?

如果我有:

struct whatever { int data; };

const whatever test;

test.data也是const吗?

我的回答是:是的。如果您使用whatever声明类型为const的对象,则其所有成员也将const

同样,如果您使用whatever声明类型为volatile的对象,那么其所有成员也将是volatile,就像您使用const声明对象一样,它的所有成员也将是const

constvolatile是同一枚硬币的两面;它们是标准经常将它们称为cv-qualifiers


引自标准($ 7.1.5.1 / 8)

  

[注意:volatile是暗示的   实施以避免攻击性   优化涉及对象   因为对象的值可能   通过不可检测的方式改变   实现。详见1.9   语义。一般来说,语义   挥发性的意图是   C + +与C +相同。]

这意味着,如果你的对象是结构的一个实例,那么编译器就不能避免涉及对象的激进优化,除非它避免了对每个结构的积极优化成员。 (否则,它如何避免涉及对象的优化?)


相关主题:

Why do we use volatile keyword in 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;