将对象形参作为const传递并读取它
pass a object parameter as const and read it
这可能是一个愚蠢的问题,但我无法解决这个问题。
我有一个叫做方程组的对象,其中定义了一个矩阵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&)函数
除了你发现的方法,还有其他的可能性:
-
如果你可以改变类mat,你可以使operator()签名为const。
-
如果不能更改mat接口,最好将f的签名更改为非const参数引用,因为如果不能更改mat接口,就不能真正保证operator()不会更改X的状态。
-
const_cast使用。我强烈建议不要使用它。我在这里提到它只是为了完整。