为什么volatile
对象不能调用非volatile
成员函数?
对于const
,调用非const
成员函数违反了对象的 constness 是有道理的,因此禁止它。但是{strong>为什么是volatile
?
答案 0 :(得分:4)
对于const,调用非const成员函数违反了对象的常量是有道理的,因此它是被禁止的。但是为什么在不稳定的情况下?
对于不稳定的情况也是如此。易失性意味着对对象的每次访问都是可见的副作用,无法消除。如果在易失性对象上调用非易失性方法,则会违反此属性(因为非易失性方法会将对象视为普通对象)。因此,这是不可能的。
答案 1 :(得分:4)
来自标准:
7.1.5.1。如果尝试通过使用带有a的左值来引用使用volatile-quailified类型定义的对象 非易失性 - 鹌鹑类型,程序行为未定义。
我猜你的编译器发布错误以防止未定义的行为。标准陈述应该是足够的理由。
答案 2 :(得分:2)
volatile
限定符的工作方式与const
的工作方式相同。要查看可以完成的,请查看this Alexandrescu article。
该文章还应该让您对为什么。