为什么volatile对象不能调用非易失性成员函数

时间:2011-11-08 10:29:35

标签: c++ volatile language-lawyer member-functions

为什么volatile对象不能调用非volatile成员函数?

对于const,调用非const成员函数违反了对象的 constness 是有道理的,因此禁止它。但是{strong>为什么是volatile

的情况

3 个答案:

答案 0 :(得分:4)

  

对于const,调用非const成员函数违反了对象的常量是有道理的,因此它是被禁止的。但是为什么在不稳定的情况下?

对于不稳定的情况也是如此。易失性意味着对对象的每次访问都是可见的副作用,无法消除。如果在易失性对象上调用非易失性方法,则会违反此属性(因为非易失性方法会将对象视为普通对象)。因此,这是不可能的。

答案 1 :(得分:4)

来自标准:

  

7.1.5.1。如果尝试通过使用带有a的左值来引用使用volatile-quailified类型定义的对象   非易失性 - 鹌鹑类型,程序行为未定义。

我猜你的编译器发布错误以防止未定义的行为。标准陈述应该是足够的理由。

答案 2 :(得分:2)

volatile限定符的工作方式与const的工作方式相同。要查看可以完成的,请查看this Alexandrescu article。 该文章还应该让您对为什么

有所了解