6

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

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

4

3 回答 3

5

在 const 的情况下,调用非 const 成员函数违反对象的 const-ness 是有道理的,因此被禁止。但是为什么在volatile的情况下呢?

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

于 2011-11-08T10:32:58.310 回答
4

从标准:

7.1.5.1。如果尝试通过使用具有非易失性限定类型的左值来引用使用易失性限定类型定义的对象,则程序行为是未定义的。

我猜你的编译器会发布一个错误以防止未定义的行为。如此说明的标准应该是足够的理由。

于 2011-11-08T10:37:16.973 回答
2

限定符的volatile工作方式与工作方式大致相同const。要了解由此可以做什么,请查看这篇Alexandrescu 文章。那篇文章还应该让您了解原因

于 2011-11-08T10:33:49.953 回答