繁体   English   中英

使 struct volatile 是否会使其所有成员都变得 volatile?

[英]Does making a struct volatile make all its members volatile?

如果我有:

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

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

制作 struct const使其所有成员都为const吗?

如果我有:

struct whatever { int data; };

const whatever test;

test.data 也会是const吗?

我的回答是:是的。 如果你用const声明一个whatever类型的对象,那么它的所有成员也将是const

类似地,如果你用volatile声明一个whatever类型的对象,那么它的所有成员也将是volatile ,就像你用const声明对象一样,它的所有成员也将是const

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


引用标准 ($7.1.5.1/8)

[注意: volatile 是实现的提示,以避免涉及对象的激进优化因为对象的值可能会通过实现无法检测的方式更改。 有关详细语义,请参见 1.9。 通常,volatile 的语义在 C++ 中与在 C 中的语义相同。]

这意味着,如果您的对象是一个结构体的实例,那么编译器将无法避免涉及 object 的主动优化除非它避免对其每个成员进行主动优化。 (否则,它还能如何避免涉及对象的优化?)


相关主题:

为什么我们在 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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM