C++ 操作员不应';不可能是恒定的,但也可能是恒定的
我实现了一个类MyMatrix,它包含一个指向抽象类矩阵的指针(指针是_矩阵)。 运算符+=调用add方法并添加_矩阵变量。 因此,类变量_矩阵发生变化,因此+=运算符不能为常数, 但出于某种原因,编译器允许我将其设置为const,并且没有异常。 为什么呢C++ 操作员不应';不可能是恒定的,但也可能是恒定的,c++,class,variables,constants,operator-keyword,C++,Class,Variables,Constants,Operator Keyword,我实现了一个类MyMatrix,它包含一个指向抽象类矩阵的指针(指针是_矩阵)。 运算符+=调用add方法并添加_矩阵变量。 因此,类变量_矩阵发生变化,因此+=运算符不能为常数, 但出于某种原因,编译器允许我将其设置为const,并且没有异常。 为什么呢 const MyMatrix& MyMatrix::operator +=(const MyMatrix& other) const { _matrix->add(*other._matrix); ret
const MyMatrix& MyMatrix::operator +=(const MyMatrix& other) const
{
_matrix->add(*other._matrix);
return *this;
}
这是补充:
void add(Matrix &other)
{
for (int i = 0; i < other.getSize(); i++)
{
Pair indexPair = other.getCurrentIndex();
double value = other.getValue(indexPair);
pair<Pair, double> pairToAdd(indexPair, value);
other.next();
if (pairToAdd.second != 0)
{
setValue(pairToAdd.first, getValue(pairToAdd.first) + pairToAdd.second);
}
}
initializeIterator();
}
void添加(矩阵和其他)
{
对于(int i=0;i
const方法使:
Matrix* _matrix;
指针常量,采用以下方式:
Matrix* const _matrix;
不是这样的:
const Matrix* _matrix;
也就是说,指针是常量,而不是指针对象。因此,您可以在\u矩阵上调用非常量方法
如果您想强制const方法中的指针对象为const,请使用运算符+=
中的技巧,因为您很可能已将\u矩阵
成员声明为简单指针。因此,operator+=
不会更改MyMatrix
的状态,因为您没有更改指针,而是更改指向的对象
由您决定将运算符+=
声明为常量是否是一个好主意。即使编译器允许,也很可能不是这样。它只会让类的用户感到困惑。我们需要查看其余的代码,特别是类定义。也许add
是(错误的?const
)。(也许add
返回加法的结果,而这个操作符实际上没有改变任何东西?)您可以添加Matrix::add
函数的签名和_Matrix?\u Matrix->add(*other.\u Matrix)的声明吗
甚至不应该编译,除非\u矩阵
是可变的
和/或add()
也是常量
。add()不是常量,且_矩阵不可变。@greg是\u矩阵
指针吗?我相信在另一个问题中已经提到,成员函数上的const
限定符使指针数据成员变成T*const T
,而不是const T*T
。