C++ 在某些限制条件下更改类的常量成员

C++ 在某些限制条件下更改类的常量成员,c++,class,constants,C++,Class,Constants,我有一个类,它将整数表示为两个整数的差I和j。 类的唯一重要值(对于用户)是差异i-j。 我希望能够使用具有const限定符的函数(在下面的函数normalize示例中),这些函数确实会更改类的内部结构,但不会更改差异I-j 最好的方法是什么 class negnum { public: int get(void){ return i-j; } void set(int val){ i=val; j=0; } int normalize()

我有一个类,它将整数表示为两个整数的差
I
j
。 类的唯一重要值(对于用户)是差异
i-j
。 我希望能够使用具有
const
限定符的函数(在下面的函数
normalize
示例中),这些函数确实会更改类的内部结构,但不会更改差异
I-j

最好的方法是什么

class negnum {
    public:
        int get(void){ return i-j; }
        void set(int val){ i=val; j=0; }
        int normalize() const {i=i-j; j=0; }
        /* other functions working on i and j*/

    private:
        int i;
        int j;
}

由于许多评论建议我应该保留差异:
我真正的问题涉及到有限支持序列的实现,而这种简单的解决方案是不可能的。

您可以对类字段使用
mutable
,但我不推荐这样做。如果您的方法修改类字段,那么无论行为解释如何,它都不应该是
const
。如果唯一重要的值是差异,为什么不存储差异而不是
i
j
?@Ptaq666:这就是
mutable
的目的。按照你的思维方式,
mutable
永远不应该被使用。你真的需要
i
j
?你不能简单地存储他们的差异吗?@Farenor:我打赌我们看不到全部情况。此表单中的示例没有太大意义,因为
j
始终为零。您可以对类字段使用
mutable
,但我不建议这样做。如果您的方法修改类字段,那么无论行为解释如何,它都不应该是
const
。如果唯一重要的值是差异,为什么不存储差异而不是
i
j
?@Ptaq666:这就是
mutable
的目的。按照你的思维方式,
mutable
永远不应该被使用。你真的需要
i
j
?你不能简单地存储他们的差异吗?@Farenor:我打赌我们看不到全部情况。这种形式的示例没有太多意义,因为
j
始终为零。