代码之家  ›  专栏  ›  技术社区  ›  w00d

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

  •  10
  • w00d  · 技术社区  · 14 年前

    我有一个类A,它的运算符重载了。但是,我需要这样做:

    volatile A x;
    A y;
    x = y;
    

    编译时出错

    error: no operator "=" matches these operands
           operand types are: volatile A = A
    

    如果我删除volatile,它是可编译的。是否仍要在不删除“volatile”的情况下编译此文件(并且仍保留volatile的行为)?


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

    关于这个问题的更多内容:开始时,A只是一个基本类型,例如integer,volatile按预期工作,不会造成任何问题,现在我希望它是一个自定义类(例如integer 128位)。我不确定为什么C++在这种情况下会抱怨,但不是用原始数据类型。

    事先谢谢。

    4 回复  |  直到 10 年前
        1
  •  7
  •   Mike Seymour    14 年前

    volatile A& A::operator=(const A&) volatile

    const_cast<A&>(x) = y

        2
  •  2
  •   ArchaeaSoftware    14 年前

        4
  •  1
  •   jascha    13 年前

    volatile A& operator=(volatile A&) volatile;