首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于易失性和非易失性实例的重载类。

对于易失性和非易失性实例的重载类。
EN

Stack Overflow用户
提问于 2012-12-13 19:59:07
回答 2查看 197关注 0票数 3

我正在编写一个类,它需要同时支持易失性实例和非易失性实例(易失性实例使用原子操作,非易失性实例使用常规操作),并且想知道我是否以正确的方式处理它。到目前为止,下面是类声明的一个片段:

代码语言:javascript
复制
class Yield {
public:
    Yield();
    Yield(Yield const &other);
    Yield(Yield const volatile &other);

    Yield &operator=(Yield const &other);
    Yield &operator=(Yield const volatile &other);

    Yield &operator+=(Yield const &other);
    Yield &operator+=(Yield const volatile &other);
    Yield volatile &operator+=(Yield const &other) volatile;
    Yield volatile &operator+=(Yield const volatile &other) volatile;

    // Other operators snipped...
};
  • 问题1:在用MSVC编译时,我会收到以下警告: warning C4521: 'util::Yield' : multiple copy constructors specified 这个警告预示着在使用这个类时会出现什么问题吗?或者它可以安全地被忽视吗?
  • 问题2:就目前情况而言,对于易失性和非易失性other参数,所有操作符都会被重载。我认为这是必要的,以避免对非易失性实例进行较慢的易失性访问?是否可以允许每种方法只编码两次(易失性lhs和非易失性lhs)而不是4次(易失性和非易失性lhs,每种方法都有易失性和非易失性rhs)?

我希望把这些问题放在一起是可以的,否则请留下评论,我可以把它们分开。谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-14 19:54:49

易失性不像你想的那样。

即使使用VC++的特殊的、非标准的volatile行为,它也会导致代码比正确编写代码要慢。使用std::atomic,或者如果这是不可用的,那么您可能有特定于平台的屏障、栅栏和原子本质。VC++有_ReadWriteBarrier_Interlocked功能来帮助您。

票数 2
EN

Stack Overflow用户

发布于 2012-12-14 19:48:04

该类具有单个类型的多个副本构造函数。此警告是信息性的;可在程序中调用构造函数。

来自msdn网站:编译器警告(3级) C4521

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13867480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档