C易于运行和CUDA应用程序超载

C易于运行和CUDA应用程序超载,第1张

概述我有一个类A,我重载它的operator =.但是,我需要做这样的事情: volatile A x;A y;x = y; 这在编译时引起错误 error: no operator "=" matches these operands operand types are: volatile A = A 如果我删除了volatile,它是可编译的.有没有这个编译没有删除“volati 我有一个类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只是一个原始类型,如整数,易失性工作如预期,不会造成任何问题,现在我希望它成为一个自定义类(例如128位整数).我不知道为什么C在这种情况下抱怨,但不是基本的数据类型.

提前致谢.

@H_301_16@解决方法 假设需要易失性资格,您必须向A(A& A :: operator =(const A&)volatile)添加一个易失性赋值运算符.

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

@H_301_16@ @H_301_16@ 总结

以上是内存溢出为你收集整理的C易于运行和CUDA应用程序超载全部内容,希望文章能够帮你解决C易于运行和CUDA应用程序超载所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1251104.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存