1. ホーム
  2. c++

[解決済み] 構造体をvolatileにすると、その構造体のすべてのメンバがvolatileになりますか?

2022-11-14 21:33:50

質問

もし、私が

struct whatever {
int data;
};
volatile whatever test;
意志 test.data も揮発するのでしょうか?

どのように解決するのですか?

別の質問をすることができます(または、単に元の質問を見るための別の方法)。

構造体を作ることは const を作ると、そのすべてのメンバが const ?

もし、私が

struct whatever { int data; };

const whatever test;

test.dataは const にもなるのでしょうか?

私の答えは.はい、そうです。型のオブジェクトを宣言すると whateverconst とすると、そのメンバーはすべて const にもなります。

同様に、もしあなたが型 whatevervolatile とすると、そのメンバーはすべて volatile でオブジェクトを宣言した場合と同様に const で宣言した場合、そのメンバーはすべて const にもなります。

const そして volatile は同じコインの二つの顔であり、Standard がしばしばそれらを cv-qualifiers .


標準からの引用 ($7.1.5.1/8)

<ブロッククオート

[注:揮発性とは へのヒントです。 実装 であり、積極的な 最適化 オブジェクトを含む なぜなら オブジェクトの値 は が検出できない手段で変更される可能性があるからです。 によって変更されるかもしれません。詳細な意味については1.9を参照してください。 を参照してください。一般に、volatileのセマンティクスは のセマンティクスは、C++でもC++と同じであることを意図しています。 C++では、C++と同じであることを意図しています。]

つまり、オブジェクトが構造体のインスタンスである場合、コンパイラーは オブジェクトを含む積極的な最適化を避けることができます。 , でなければ であれば、それの各メンバーの積極的な最適化を避けることができます。(そうでなければ、他にどのようにオブジェクトを含む最適化を避けることができますか?)


関連するトピック

なぜ C++ で volatile キーワードを使用するのですか?