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

时间:2015-10-20 15:49:08

标签: c++ const armadillo

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

我有一个叫做方程式的对象,其中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;

}

我工作,我无法理解为什么! 你能救我吗?

2 个答案:

答案 0 :(得分:2)

尝试(* X)(12,12)。

函数调用运算符&#34;()&#34;优先级高于间接运算符&#34; *&#34;。

答案 1 :(得分:0)

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

因此,最有可能的是,mat类定义了operator =(const mat&amp;)函数。

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

  1. 如果您能够更改类垫,则可以使operator()签名为const。这将解决问题。

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

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