为什么易失性对象不能调用非易失性成员函数
why can't a volatile object call nonvolatile member function
为什么volatile
对象不能调用非volatile
成员函数?
在const
的情况下,调用非const
成员函数违反对象的constness是有意义的,因此被禁止。但是为什么在volatile
的情况下呢?
在const的情况下,调用非const成员函数违反对象的const性是有意义的,因此被禁止。但为什么是volatile呢?
volatile也是一样的。Volatile意味着对对象的每次访问都是可见的副作用,无法消除。如果在易失性对象上调用非易失性方法,就会违反此属性(因为非易失性方法会将该对象视为普通对象)。因此,这是不可能的。
从标准:
7.1.5.1。如果试图通过使用带有a的左值来引用由易失性限定类型定义的对象非易失性限定类型,程序行为未定义。
我猜你的编译器发布了一个错误来防止未定义的行为。标准的说明应该有足够的理由
volatile
限定符的工作方式与const
的工作方式大致相同。要查看可以完成什么,请查看Alexandrescu的文章。这篇文章还应该让您了解为什么
相关文章:
- 易失性sig_atomic_t的内存安全性
- C++易失性:保证 32 位访问?
- 避免易失性和非易失性成员函数的代码重复
- 当 2 个线程共享同一物理内核时,具有错误共享的易失性增量在发布中的运行速度比在调试中慢
- 如何访问常量易失性 std::array?
- 为什么在 C++20 中弃用易失性?
- 根据 MSVC,具有易失性成员的结构不再是 POD
- 是否允许编译器优化掉局部易失性变量
- 访问共享内存而不使用易失性、std::atomic、信号量、互斥锁和自旋锁
- C++:易失性实例中的易失性成员函数 - 将数组分配给指针是无效的转换?
- 成员函数无法访问易失性成员
- 易失性数据成员是易于复制的
- 如何用libclang找出成员函数是常量还是易失性
- C++中易失性成员函数与常量成员函数的比较
- 易失性关键字在C++中成员函数声明中的位置
- 易失性成员函数 (C++)
- 易失性成员的访问方法
- 为什么易失性对象不能调用非易失性成员函数
- 你能从易失性函数中抛弃成员上的易失性吗>
- 为什么易失性静态成员初始化会生成重新定义编译错误