gpt4 book ai didi

CUDA 应用程序的 C++ volatile 和运算符重载

转载 作者:可可西里 更新时间:2023-11-01 15:59:37 24 4
gpt4 key购买 nike

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

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 只是一个原始类型,例如整数,volatile 按预期工作并且不会引起任何问题,现在我希望它成为一个自定义类(例如 128 位整数)。我不确定为什么 C++ 在这种情况下会提示,但原始数据类型却不会。

提前致谢。

最佳答案

假设 volatile限定是必要的,您必须向 A ( A& A::operator=(const A&) volatile ) 添加一个可变赋值运算符。

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

关于CUDA 应用程序的 C++ volatile 和运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3699062/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com