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

why can't a volatile object call nonvolatile member function

本文关键字:易失性 成员 函数 不能 对象 为什么 调用      更新时间:2023-10-16

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

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

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

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

从标准:

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

我猜你的编译器发布了一个错误来防止未定义的行为。标准的说明应该有足够的理由

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