私が持っている場合:
struct whatever {
int data;
};
volatile whatever test;
うtest.data、あまりにも揮発性?
私が持っている場合:
struct whatever {
int data;
};
volatile whatever test;
うtest.data、あまりにも揮発性?
回答:
別の質問をすることができます(または単に元の質問を見る別の方法):
const作成すると、すべてのメンバーが作成されconstますか?私が持っている場合:
struct whatever { int data; };
const whatever test;
test.data constもでしょうか?
私の答えは:はい。タイプのオブジェクトを宣言するwhateverとconst、そのすべてのメンバーもconst同様になります
同様に、でオブジェクトを宣言するwhateverとvolatile、そのすべてのメンバーvolatileも同様になり、でオブジェクトを宣言した場合と同様に、そのすべてのメンバーも同様constになりconstます。
constそして、volatile同じコインの両面です。それらは、標準がしばしばそれらをと呼ぶようにするためcv-qualifiersです。
標準からの引用(7.1.5.1/8ドル)
[注:揮発性は、オブジェクトの値が実装によって検出されない方法で変更される可能性がある ため、オブジェクトを含む積極的な最適化を回避するための実装へのヒントです。詳細なセマンティクスについては、1.9を参照してください。一般に、volatileのセマンティクスは、C ++でもCと同じであることを意図しています。]
あなたのオブジェクトは、構造体のインスタンスである場合を意味し、その後、コンパイラはできませんオブジェクトを含む積極的な最適化を避けるため、しない限り、それはそれのメンバーのそれぞれの積極的な最適化を避けることができます。(それ以外の場合、オブジェクトを含む最適化を他にどのように回避できますか?)
関連トピック:
送信元: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;
volatileメンバー関数を持つとthisポインターが揮発するだけなので、メンバーはアクセスされるたびにメモリから読み取られますが、「公式には」揮発性ではありません。