我有一个类A,我重载了它的operator=运算符。然而,现在我需要执行以下操作:
基本上这是一个 CUDA 程序,在程序中 'x' 是共享内存(所有线程都可以访问和修改它的值)。我希望它是 "volatile" 类型以避免编译器优化并重用值而不是访问内存地址。
更多问题:开始时,A 只是一个基本类型,例如整数,volatile 的工作方式符合预期并且不会引起任何问题,现在我希望它是一个自定义类(例如 128 位的整数)。我不确定为什么 C++ 在这种情况下会出问题,而对于原始数据类型则不会。
谢谢。
volatile A x;
A y;
x = y;
编译时引发错误
error: no operator "=" matches these operands
operand types are: volatile A = A
如果我去掉了 volatile,代码可以编译。有没有办法在不删除 "volatile" 的情况下编译它(并保持 volatile 的行为)?
基本上这是一个 CUDA 程序,在程序中 'x' 是共享内存(所有线程都可以访问和修改它的值)。我希望它是 "volatile" 类型以避免编译器优化并重用值而不是访问内存地址。
更多问题:开始时,A 只是一个基本类型,例如整数,volatile 的工作方式符合预期并且不会引起任何问题,现在我希望它是一个自定义类(例如 128 位的整数)。我不确定为什么 C++ 在这种情况下会出问题,而对于原始数据类型则不会。
谢谢。
volatile
会有什么行为? - Mike Seymourvolatile
意味着在你写入时目标可能被其他人写入,因此请确保设置内存屏障或其他措施。 - M.M