6

オブジェクトが非メンバー関数volatileを呼び出せないのはなぜですか?volatile

の場合const、非constメンバー関数の呼び出しはオブジェクトのconstnessに違反するため、禁止されています。しかし、なぜの場合volatileですか?

4

3 に答える 3

5

const の場合、非 const メンバー関数を呼び出すことは、オブジェクトの const 性に違反するため、禁止されています。しかし、揮発性の場合はなぜですか?

揮発性についても同じです。揮発性とは、オブジェクトへのすべてのアクセスが目に見える副作用であり、排除できないことを意味します。volatile オブジェクトで nonvolatile メソッドを呼び出すと、このプロパティに違反します (nonvolatile メソッドはオブジェクトを通常のオブジェクトとして扱うため)。したがって、それは不可能です。

于 2011-11-08T10:32:58.310 に答える
4

標準から:

7.1.5.1. 非 volatile 修飾型の左辺値を使用して、volatile 修飾型で定義されたオブジェクトを参照しようとすると、プログラムの動作は未定義になります。

未定義の動作を防ぐために、コンパイラがエラーを投稿していると思います。そのように述べている標準は十分な理由であるはずです。

于 2011-11-08T10:37:16.973 に答える
2

修飾子は、volatileworks とほとんど同じように機能しconstます。これによりができるかを確認するには、この Alexandrescu の記事をご覧ください。その記事では、その理由についての洞察も得られるはずです。

于 2011-11-08T10:33:49.953 に答える