[英]why can't a volatile object call nonvolatile member function
为什么volatile
对象不能调用非易失volatile
成员函数?
在的情况下const
,是非常有意义的调用非const
成员函数违反对象的常量性 ,因此它被禁止。 但为什么在volatile
?
在const的情况下,调用非const成员函数违反了对象的常量是有道理的,因此它是被禁止的。 但为什么在波动?
对于不稳定的情况也是如此。 易失性意味着对对象的每次访问都是可见的副作用,无法消除。 如果在易失性对象上调用非易失性方法,则会违反此属性(因为非易失性方法会将对象视为普通对象)。 因此,这是不可能的。
从标准:
7.1.5.1。 如果尝试通过使用具有非volatile-quailified类型的左值来引用使用volatile-quailified类型定义的对象,则程序行为是未定义的。
我猜你的编译器发布了一个错误来防止未定义的行为。 标准陈述应该是足够的理由。
volatile
限定符的工作方式与const
工作方式相同。 要了解这可以做些什么 ,请看看这篇Alexandrescu文章 。 那篇文章也应该让你对原因有所了解。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.