将对象声明为 volatile 时如何在 C++ 中重载运算符

How to overload operators in C++ when declaring an Object as volatile

我需要有关易变对象的建议。这是我的 class

class A
{
private:
volatile unsigned long count;
public:

A & operator = (unsigned long number) { count = number; return *this; }
};

我创建了一个声明为 volatile

的 class 实例
volatile A myClass;

当我使用“=”运算符赋值时出现编译错误

myClass = 5;

如何转换 "this" 指针才能使其工作?或者这甚至是问题所在?

第一个问题是您不能使用volatile 指针、引用或实例调用非volatile 成员函数。这类似于 const,如果您的对象是 const 或者您的指针或引用是 const 合格类型,您只能调用 const 成员函数。因此必须必须使您的成员函数 volatile.

第二个问题是,由于你的成员函数将成为volatilethis指针也将是volatile,这意味着*this是一个volatile A &。您将无法将 *this 绑定到 A &,这是您的运算符的 return 类型,因为 volatile A & 无法绑定到 A &。同样,这就像无法将 const A & 绑定到 A &const。解决方案是将运算符的 return 类型更改为 volatile A &.

您的操作员应如下所示:

volatile A & operator= (unsigned long number) volatile
{
    count = number; 
    return *this; 
}