将对象形参作为const传递并读取它



这可能是一个愚蠢的问题,但我无法解决这个问题。

我有一个叫做方程组的对象,其中定义了一个矩阵x

在main中,我需要调用一个名为f的函数,其中我需要将矩阵作为const传递。我需要访问矩阵的特定位置(我不想写,只想读)。

我做了以下事情:

vec f(cx_mat const*X)
{
cout << “X[12][12] = “ << *X(12,12) << endl;
}

它不起作用。如果我这样做:

vec f(cx_mat const*X)
{
mat X_temp;
X_temp = *X;
cout << “X[12][12] = “ << X_temp(12,12) << endl;
}

我工作,我不明白为什么!你能帮我吗?

Try (*X)(12,12)代替。

函数调用操作符"()"的优先级高于间接操作符"*"。

在你的第二个例子中,你正在创建一个mat对象的副本,它不调用x的任何非const方法。这实际上是你的问题的解决方案,尽管不是真正有效-我宁愿避免不必要的副本。

所以,mat类很可能定义了operator=(const mat&)函数

除了你发现的方法,还有其他的可能性:

  1. 如果你可以改变类mat,你可以使operator()签名为const。

  2. 如果不能更改mat接口,最好将f的签名更改为非const参数引用,因为如果不能更改mat接口,就不能真正保证operator()不会更改X的状态。

  3. const_cast使用。我强烈建议不要使用它。我在这里提到它只是为了完整。

最新更新