我正在编写一个需要同时支持易失性和非易失性实例的类(易失性实例使用原子操作,非易失性实例使用常规操作),并且想知道我是否以正确的方式进行操作。到目前为止,这是类声明的片段:
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:就目前而言,所有运算符都对 volatile 和 non-volatile
other
参数进行了重载。我认为这是必要的,以避免对非易失性实例进行较慢的易失性访问?是否有替代方法允许每种方法只编码两次(易失性 lhs 和非易失性 lhs)而不是 4 次(易失性和非易失性 lhs,每个都有易失性和非易失性 rhs)?
我希望将这些问题放在一起是可以的,否则请发表评论,我可以将它们分开。谢谢!