【发布时间】:2010-09-13 09:14:09
【问题描述】:
我有一个 A 类,我重载了它的 operator=。但是,我需要做这样的事情:
volatile A x;
A y;
x = y;
编译时出现错误
error: no operator "=" matches these operands
operand types are: volatile A = A
如果我删除了 volatile,它是可编译的。无论如何要在不删除“易失性”的情况下编译这个(并且仍然保持易失性的行为)?
基本上这是一个 CUDA 程序,其中 'x' 是共享内存(所有线程都可以访问和修改它的值)。我希望它是“易失性的”,以避免编译器优化并重用该值而不是访问内存地址。
关于问题的更多信息:一开始 A 只是一个原始类型,例如整数,易失性按预期工作并且不会引起任何问题,现在我希望它是一个自定义类(例如整数 128 位)。我不确定为什么 C++ 在这种情况下会抱怨,但不会抱怨原始数据类型。
提前致谢。
【问题讨论】:
标签: c++ operator-overloading cuda volatile