C++易失性和CUDA应用程序的运算符重载

w00*_*00d 10 c++ cuda operator-overloading volatile

我有一个A类,我重载它的operator =.但是,我需要做这样的事情:

volatile A x;
A y;
x = y;
Run Code Online (Sandbox Code Playgroud)

这在编译时引发了错误

error: no operator "=" matches these operands
       operand types are: volatile A = A
Run Code Online (Sandbox Code Playgroud)

如果我删除了volatile,它是可编译的.反正有没有删除"volatile"(仍然保持volatile的行为)编译?


基本上这是一个CUDA程序,其中'x'是共享内存(所有线程都可以访问和修改其值).我希望它是"易变的",以避免编译器优化并重新使用该值而不是访问内存地址.

更多关于这个问题:在开始时A只是一个原始类型,例如整数,volatile按预期工作并且不会引起任何问题,现在我希望它是一个自定义类(例如整数128位).我不确定为什么C++会在这种情况下抱怨,而不是原始数据类型.

提前致谢.

Mik*_*our 7

假设volatile必须进行限定,则必须向A(A& A::operator=(const A&) volatile)添加volatile赋值运算符.

const_cast<A&>(x) = y将使它编译,但技术上会导致未定义的行为,并肯定会删除volatile给出的保证.