这可能是一个愚蠢的问题,但我无法解决这个问题。
我有一个叫做方程式的对象,其中inside定义了一个名为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;
}
我工作,我无法理解为什么! 你能救我吗?
答案 0 :(得分:2)
尝试(* X)(12,12)。
函数调用运算符&#34;()&#34;优先级高于间接运算符&#34; *&#34;。
答案 1 :(得分:0)
在你的第二个例子中,你正在创建一个mat对象的副本,它不会调用X的任何非const方法。这实际上是你问题的解决方案,虽然不是很有效 - 我宁愿避免不必要的副本。
因此,最有可能的是,mat类定义了operator =(const mat&amp;)函数。
除了您发现的方法之外,还有其他可能性:
如果您能够更改类垫,则可以使operator()签名为const。这将解决问题。
如果你不能改变mat接口,最好将f的签名改为非const参数引用,因为不能改变mat接口,你不能真正保证operator()不会改变X的状态。
使用const_cast。我强烈建议不要使用它。我在这里只是为了完整性而提到它。