[英]Is the order of writes to separate members of a volatile struct guaranteed to be preserved?
[英]Does making a struct volatile make all its members volatile?
如果我有:
struct whatever {
int data;
};
volatile whatever test;
test.data
也會不穩定嗎?
可以問另一個問題(或者只是另一種看待原始問題的方式):
const
使其所有成員都為const
嗎?如果我有:
struct whatever { int data; };
const whatever test;
test.data 也會是const
嗎?
我的回答是:是的。 如果你用const
聲明一個whatever
類型的對象,那么它的所有成員也將是const
類似地,如果你用volatile
聲明一個whatever
類型的對象,那么它的所有成員也將是volatile
,就像你用const
聲明對象一樣,它的所有成員也將是const
。
const
和volatile
是同一枚硬幣的兩個面; 它們是這樣的,標准經常將它們稱為cv-qualifiers
。
引用標准 ($7.1.5.1/8)
[注意: volatile 是實現的提示,以避免涉及對象的激進優化,因為對象的值可能會通過實現無法檢測的方式更改。 有關詳細語義,請參見 1.9。 通常,volatile 的語義在 C++ 中與在 C 中的語義相同。]
這意味着,如果您的對象是一個結構體的實例,那么編譯器將無法避免涉及 object 的主動優化,除非它避免對其每個成員進行主動優化。 (否則,它還能如何避免涉及對象的優化?)
相關主題:
來自: 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.