簡體   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