我正在尝试ACCESS_ONCE
在 c++11 中实现相当于 Linux 宏的功能。
ACCESS_ONCE(x)
获取 x 的地址,转换为指向与 x 相同类型的 volatile 的指针,然后取消引用它。这会强制编译器不优化通过此宏对 x 的访问(并使访问仅在此处发生一次)。
我在 c++11 中的尝试包括decltype
:
#define ACCESS_ONCE(x) (*static_cast<decltype(x) volatile *>(&(x)))
这适用于大多数情况,但我像这样使用它一次:
void foo(void **bar) {
while (ACCESS_ONCE(*bar) != NULL)
;
}
这失败并出现错误:
'volatile' qualifiers cannot be applied to 'void*&'
我究竟做错了什么?