volatile
オブジェクトが非volatile
メンバ関数を呼び出せないのはなぜですか?揮発性オブジェクトが不揮発性メンバ関数を呼び出すことができない理由
はconst
の場合には、非const
メンバ関数を呼び出すと、オブジェクトのconst性に違反するという意味になり、従って、それが禁止されています。しかしなぜの場合volatile
の場合?
volatile
オブジェクトが非volatile
メンバ関数を呼び出せないのはなぜですか?揮発性オブジェクトが不揮発性メンバ関数を呼び出すことができない理由
はconst
の場合には、非const
メンバ関数を呼び出すと、オブジェクトのconst性に違反するという意味になり、従って、それが禁止されています。しかしなぜの場合volatile
の場合?
constの場合、非constメンバ関数を呼び出すと、オブジェクトのconstanceが違反することになり、禁止されます。しかし、なぜ揮発性の場合には?
揮発性の場合とまったく同じです。揮発性とは、オブジェクトへのアクセスがすべて目に見える副作用であり、排除できないことを意味します。揮発性オブジェクトに対して不揮発性メソッドを呼び出した場合は、このプロパティに違反します(不揮発性メソッドはオブジェクトを通常オブジェクトと同様に扱うため)。したがって、不可能です。
volatile
修飾子は、const
と同じように動作します。 をご覧になるには、を実行してください。this Alexandrescu articleをご覧ください。 その記事ではの理由についての洞察も得られるはずです。標準から
これは2001年の記事です。重要なセクション/マルチスレッドの目的ではvolatileに関するアドバイスをしています。 。たとえば:https://www.securecoding.cert.org/confluence/display/seccode/POS03-C.+Do+not+use+volatile+as+a+synchronization+primitive – Nikko
@ニッコ:その答えで参照されている記事のタイトル以上を読んでください。 *完全な記事を読んでください。 – ybungalobill
:
7.1.5.1。 不揮発性のquailified型の左辺値を使用してvolatile-quailified型で定義されたオブジェクトを参照しようとすると、プログラムの動作は未定義です。
私はあなたのコンパイラが未定義の動作を防ぐためにエラーを投稿していると推測しています。それを示す理由は十分な理由があるはずです。
あなたは揮発性の正しさを侵害しようとしているので... –
とアナグラムを見つけたばかりです。 –