オブジェクトが非メンバー関数volatile
を呼び出せないのはなぜですか?volatile
の場合const
、非const
メンバー関数の呼び出しはオブジェクトのconstnessに違反するため、禁止されています。しかし、なぜの場合volatile
ですか?
オブジェクトが非メンバー関数volatile
を呼び出せないのはなぜですか?volatile
の場合const
、非const
メンバー関数の呼び出しはオブジェクトのconstnessに違反するため、禁止されています。しかし、なぜの場合volatile
ですか?
const の場合、非 const メンバー関数を呼び出すことは、オブジェクトの const 性に違反するため、禁止されています。しかし、揮発性の場合はなぜですか?
揮発性についても同じです。揮発性とは、オブジェクトへのすべてのアクセスが目に見える副作用であり、排除できないことを意味します。volatile オブジェクトで nonvolatile メソッドを呼び出すと、このプロパティに違反します (nonvolatile メソッドはオブジェクトを通常のオブジェクトとして扱うため)。したがって、それは不可能です。
標準から:
7.1.5.1. 非 volatile 修飾型の左辺値を使用して、volatile 修飾型で定義されたオブジェクトを参照しようとすると、プログラムの動作は未定義になります。
未定義の動作を防ぐために、コンパイラがエラーを投稿していると思います。そのように述べている標準は十分な理由であるはずです。
修飾子は、volatile
works とほとんど同じように機能しconst
ます。これにより何ができるかを確認するには、この Alexandrescu の記事をご覧ください。その記事では、その理由についての洞察も得られるはずです。