你能从易失性函数中抛弃成员上的易失性吗>
Can you cast away volatile on a member from a volatile function>
如果你有一个标记为volatile的类成员函数,当它在该函数中使用时,是否有可能在类成员上丢弃volatile ?
是。为了消除对象的易失性,使用const_cast
:
T & t = const_cast<T&>(volatile_t);
就是这样。但是你是否应该在你的代码中使用它,我不能在不看代码的情况下说。一般来说,抛弃稳定性和波动性是一个危险的想法,只有在非常仔细地检查了所有情况之后才应该这样做。
您可以使用const_cast
从任何上下文中抛弃volatile
。你确切地问的是在volatile
成员内部的cast away,但这没有任何区别。
函数中的volatile
是一个检查,它告诉编译器,如果你试图在一个volatile
对象上调用该方法(或者通过一个指向volatile
对象的引用或指针),这与成员的volatile
性无关,请不要报错。
我想说的是,如果您期望访问数据成员时的行为与volatile
语义一致,仅仅因为代码在volatile
成员方法内,那将不会发生。
相关文章:
- 易失性sig_atomic_t的内存安全性
- C++易失性:保证 32 位访问?
- 避免易失性和非易失性成员函数的代码重复
- 当 2 个线程共享同一物理内核时,具有错误共享的易失性增量在发布中的运行速度比在调试中慢
- 如何访问常量易失性 std::array?
- 为什么在 C++20 中弃用易失性?
- 根据 MSVC,具有易失性成员的结构不再是 POD
- 是否允许编译器优化掉局部易失性变量
- 访问共享内存而不使用易失性、std::atomic、信号量、互斥锁和自旋锁
- 如何避免对无锁程序使用易失性?
- C++:易失性实例中的易失性成员函数 - 将数组分配给指针是无效的转换?
- g++ 6.3,avx 内联函数上的 Kahan 求和用易失性关键字进行序列化
- 是什么让这种易失性打破了结构的指针算法?
- 如果不需要易失性,为什么 std::atomic 方法会提供易失性重载
- *(易失性无符号整数 *) 的含义 0x00 = 0x00;
- 使用易失性 c 字符串和 std::cout
- 易失性结构 = 结构不可能,为什么?
- 如何强制 GCC 以线性方式转换易失性内联程序集语句
- 我可以使用互斥锁或关键字(静态)代替C++中的易失性吗?
- 兼容的声明 __attribute__ ((节( ".abc.dfe" ))) 常量易失性 uint8 属性变量 = 0;- 符合MISRA标准