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

Mar*_*ark 93 c++

如果我有:

__PRE__
struct whatever { int data; };
volatile whatever test;
不稳定?

Naw*_*waz 115

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

制作一个结构是否会成为其const所有成员const

如果我有:

struct whatever { int data; };

const whatever test;
Run Code Online (Sandbox Code Playgroud)

test.data const也会吗?

我的回答是:是的.如果声明类型的对象whateverconst那么它的所有成员将const

同样,如果你声明类型的对象whatevervolatile那么它的所有成员将volatile过,就像如果你声明与对象const,它的所有成员将是const太.

const并且volatile是同一枚硬币的两面; 它们是因为标准经常将它们称为cv-qualifiers.


引用标准(7.1.5.1/8美元)

[注意:volatile是对实现的暗示,以避免涉及对象的激进优化, 因为对象的值可能会被实现无法检测到的方式更改.有关详细语义,请参见1.9.一般来说,volatile的语义在C++中与在C++中的相同.

这意味着,如果您的对象是结构的实例,那么编译器无法避免涉及该对象的积极优化,除非它避免对其每个成员进行积极优化.(否则,它如何避免涉及对象的优化?)


相关主题:

为什么我们在C++中使用volatile关键字?

  • 值得注意的是,常量仅传播到直接成员。如果您的结构体保存指向某个对象的指针,则该指针本身将是 const (例如,您将无法重新分配它),但您将能够更改所指向的对象。(假设你的结构体没有指向 const 的指针) (2认同)